У меня есть следующее отображение «многие ко многим»:
<pre>
public class Student implements
{
@Id
@GeneratedValue
private Integer xID;</p>
<pre><code>@ManyToMany
@JoinTable(name = "x_y",
joinColumns = { @JoinColumn(name = "xID")},
inverseJoinColumns={@JoinColumn(name="yID")})
private Set<Cat> cats;
}
открытый класс Cat реализует
{
@Я бы
@GeneratedValue
частное целое число yID;
@ManyToMany
@JoinTable(name = "x_y",
joinColumns = { @JoinColumn(name = "yID")},
inverseJoinColumns={@JoinColumn(name="xID")})
private Set<Student> students;
}
Пожалуйста, игнорируйте имена объектов и свойств, они вымышленные и неактуальные. Это компилируется и работает нормально. Я также могу сделать это:
Entitymanager em = emf.createEntityManager();</p>
<p>em.getTransaction().begin();
Student s = new Student();
Student s2 = new Student();
Cat c = new Cat();
em.persist(s);
em.persist(s2);
em.persist(c);
s.getCats().add(c);
c.getStudents().add(s2);
em.getTransaction().commit();
Моя проблема возникает, когда я возвращаю объекты из базы данных.
em.getTransaction().begin();
Student s = em.find(Student.class, 2);
Cat c = em.find(Cat.class, 3);</p>
<p>if( c != null )
System.out.println(c.getYID() + ": " + c.getStudents());
if( s != null )
System.out.println(s.getXID() + ": " + s.getCats());
em.getTransaction().commit();
Распечатка:
3: {IndirectSet: не создан}
2: {IndirectSet: не создан}
Это вполне может быть нормальным поведением. Мне просто кажется, что когда я возвращаю объекты из таблицы, их наборы, относящиеся к другим объектам, должны быть заполнены. Что я хочу сказать, так это то, что соединительная таблица выглядит так:
X | Y
2 | 3
1 | 3
em.find (Cat.class, 3) должен возвращать объект Cat с набором {1,2} для getStudents (), а em.find (Student.class, 2) должен возвращать объект Student с набором из {3} для getCats ().
Есть ли способ сделать это возможным?
Спасибо,
B.J.