Извлечение сущности с составным первичным ключом, сопоставленным как объект, без необходимости передавать объект в методе find - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть машина 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 вместо объекта объекта из БД,Я мог бы опустить извлечение объекта из БД, тем самым сэкономив время.Однако мои первичные ключи сопоставлены как объекты, так что-нибудь подобное возможно?

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...