Связь между сущностями с JPA - PullRequest
0 голосов
/ 28 января 2020

Я создаю java веб-приложение, а для бэкэнда я использую JPA и базу данных h2. На данный момент у меня есть один класс под названием Secteur и один класс под названием Bassin. В моей концепции, у одного Secteur может быть много Bassin, но у одного Bassin может быть только один Secteur. Более того, невозможно создать Bassin, если еще нет созданного Secteur (поскольку один Bassin уже связан с Secteur).

Это класс Secteur:

@Entity
public class Secteur {
    @Id
    @GeneratedValue
    private int id;
    private String nom;
    ...
}

И это это класс Bassin:

@Entity
public class Bassin {

    @Id
    @GeneratedValue
    private int id;
    private String nomBassin;
    private int tailleMax;
    private int tailleUtilise;
    private Date dernierNetoyage;
    private String etatBassin;
    private int idSecteur;
    ...
}

После долгих исследований я увидел, что существуют различные аннотации, такие как @ManyToOne, @OneToMany и др. c. Но я не знаю, как их использовать для решения моей проблемы.

1) Можете ли вы мне помочь, пожалуйста?

2) Более того, если я использую эти аннотации, могу ли я удалить "частные int idSecteur "?

Заранее благодарим за помощь!

Ответы [ 2 ]

0 голосов
/ 29 января 2020

Спасибо всем за ваш ответ!

У меня вопрос по ссылке "baeldung.com/hibernate-one-to-many". В части 5) мы видим, что следующий код:

sessionFactory = HibernateAnnotationUtil.getSessionFactory();
session = sessionFactory.getCurrentSession();
System.out.println("Session created");

tx = session.beginTransaction();

session.save(cart);
session.save(item1);
session.save(item2);

tx.commit();
System.out.println("Cart ID=" + cart.getId());
System.out.println("item1 ID=" + item1.getId()
  + ", Foreign Key Cart ID=" + item.getCart().getId());
System.out.println("item2 ID=" + item2.getId()
+ ", Foreign Key Cart ID=" + item.getCart().getId());

дает нам:

Session created
Hibernate: insert into CART values ()
Hibernate: insert into ITEMS (cart_id)
  values (?)
Hibernate: insert into ITEMS (cart_id)
  values (?)
Cart ID=7
item1 ID=11, Foreign Key Cart ID=7
item2 ID=12, Foreign Key Cart ID=7
Closing SessionFactory

Но я не понимаю, в какой момент код приписывает корзину к поле корзины В моем случае это означает, что мне всегда нужно будет создавать пул после сектора? Как это сделать, если я хочу создать несколько секторов и назначить им пулы позже?

0 голосов
/ 28 января 2020

Отображение объекта Secteur должно быть:

@Entity
public class Secteur {
    @Id
    @GeneratedValue
    private int id;
    private String nom;

    @ManyToOne
    @JoinColumn(name="secteur_id", nullable=false)
    private Bassin bassin;
}

Отображение объекта bassin должно быть:

@Entity
public class Bassin {

    @Id
    @GeneratedValue
    private int id;
    private String nomBassin;
    private int tailleMax;
    private int tailleUtilise;
    private Date dernierNetoyage;
    private String etatBassin;

    @OneToMany(mappedBy="bassin")
    private Set<Secteur> secteurs;
}

Обратите внимание, что secteur_id в аннотации относится к имени столбец id secteur в базе данных.

Советую взглянуть на этот более полный справочник

...