У меня есть машина Entity, у которой есть составной первичный ключ:
@Entity
@Table(name = "rental", schema = "rental", catalog = "")
public class Car implements Serializable{
private Person person;
private Company company;
private Date rented;
@Id
@ManyToOne
@JoinColumn(name="person_id")
@MapsId
public User getPerson() {
return person;
}
public void setPerson(User person) {
this.person= person;
}
@Id
@ManyToOne
@JoinColumn(name="company_id")
@MapsId
public Group getCompany() {
return company;
}
public void setCompany(Company company) {
this.company= company;
}
Как видите, составной первичный ключ состоит из person
и company
, которые оба сопоставлены как объекты.
Однако, не то чтобы они отображались как объекты, мне нужно передать Object в метод create и get:
public Car getCarId(Person person, Company company) {
Session session = HibernateUtil.getSessionFactory().openSession();
Car car= null;
Transaction tx = null;
try{
tx = session.beginTransaction();
car = (Car) session.createQuery("FROM Car p WHERE p.person IN :ids ").setParameter("ids", person).getSingleResult();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
return invite;
}
Чтобы передать аргумент person
и company
, ясначала нужно сделать:
Person person = personDAO.getPersonById(id);
Company company = companyDAO.getCompanyById(id);
получить person
и company
из БД.
Чтобы создать новый Car
, мне нужно:
public void createInvite(Car car) {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
session.save(car);
tx.commit();
} catch (HibernateException e) {
if (tx!=null) tx.rollback();
throw new HibernateException(e.getMessage());
} finally {
session.close();
}
}
и сначала создать параметр car
как:
Car car= new Car();
car.setPerson(personDAO.getPersonById(id));
car.setCompany(companyDAO.getCompanyById(id));
например, также извлечь из БД.
Однако, если бы я мог просто передать идентификатор как int
вместо объекта объекта из БД,Я мог бы опустить извлечение объекта из БД, тем самым сэкономив время.Однако мои первичные ключи сопоставлены как объекты, так что-нибудь подобное возможно?
Спасибо за помощь!