Hibernate: отображение нескольких строк с ElementCollection - одна таблица без возможности встраивания - PullRequest
0 голосов
/ 22 марта 2019

В поисках решения для сопоставления нескольких student_id строк под одним и тем же class_id, вот таблица с 3 полями:

integer id PRIMARY KEY
integer class_id;
integer student_id;

В таблице может быть несколько строк под одним и тем же class_id вот так:

Table = 'class'
id  class_id  student_id 
1,    1,          1
2,    1,          2
3,    1,          3
4,    2,          1
5,    3,          1

Я пытаюсь сопоставить это с Pojo, чтобы я мог использовать его следующим образом:

List<UniClass> uniClasses = session.createQuery("FROM ClassOfStudent", ClassOfStudent.class).getResultList();

Я пытаюсь решить эту проблему с помощью@ElementCollection

Вот моя попытка:

@Entity
@Table(name = "class")
public class ClassOfStudents{
   @Id
   @Column("id")
   private long m_id;

   @Column(name = "class_id")
   private long m_classId;

   @ElementCollection
   @CollectionTable(name = "class", joinColumns = @JoinColumn(name="class_id"))
   @Column(name = "student_id")
   private List<Long> m_studentIds;

   ....
}

Есть идеи, как заставить эту работу работать?

1 Ответ

0 голосов
/ 25 марта 2019

Уловка, которая сделала это возможным, заключается в том, что в конечном итоге я сопоставил @Id класса как m_classId, хотя на самом деле это не первичный ключ таблицы в БД.

@Entity
@Table(name = "class")
public class ClassOfStudents implements Serializable
{
  @Id
  @Column(name = "class_id")
  private long classId;

  @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
  @CollectionTable(name = "class", joinColumns = @JoinColumn(name = "class_id"))
  @Column(name = "student_id", nullable = false)  
  private List<Long> m_studentIds;
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...