Я просто реорганизую проект для использования Hibernate (4.2.4.Final) с наследованием. Но у меня возникла проблема с аннотацией ManyToMany.Hibernate ManyToMany не работает при использовании Inheritance
У меня есть базовый класс файла, как это:
@Entity
@Table(name = "file")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "descriminator", length = 25)
public abstract class File {
@Id
@Column(name = "id", unique = true, nullable = false, length = 256)
private String id;
}
и специальный класс наследования, как это:
@Entity
@DiscriminatorValue("ISSUE_HISTORY_ATTACHMENT")
@Data
public class IssueHistoryAttachment extends File {
@ManyToOne(fetch = FetchType.LAZY)
@JoinTable(name = "issue_history_attachment", joinColumns = {
@JoinColumn(name = "attachment_id", nullable = false, unique = true) }, inverseJoinColumns = {
@JoinColumn(name = "issue_history_id", nullable = false)})
private IssueHistory history;
}
Этот IssueHistoryAttachment класс также ссылается на мой IssueHistory класса.
@Entity
@Table(name = "issue_history")
@TableGenerator(name="tg", table="hibernate_sequences",pkColumnName="sequence_name", valueColumnName="sequence_next_hi_value", allocationSize=1)
public class IssueHistory implements java.io.Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "tg")
@Column(name = "id", unique = true, nullable = false)
private int id;
// some other fields
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "issue_history_attachment", joinColumns = {
@JoinColumn(name = "issue_history_id", nullable = false)
}, inverseJoinColumns = {
@JoinColumn(name = "attachment_id", nullable = false, unique = true)
})
private Set<IssueHistoryAttachment> attachments = new HashSet<IssueHistoryAttachment>();
}
Когда я сейчас храню экземпляр IssueHistory с двумя вложениями, все эти поля корректно сохраняются в моей базе данных.
У меня есть две новые записи в таблице , одна новая запись в таблице * issue_history * и две правильные записи в таблице отношений * issue_history_attachment *.
Так что в этот момент все думают хорошо. Но когда я пытаюсь прочитать набор вложений значений в экземпляре IssueHistory , он содержит только один элемент вместо двух, как и в базе данных.
Любые предложения, как это решить?
Нет, также, когда я переключаюсь на @ManyToMany, эта проблема все еще существует. – Johannes