2013-08-21 3 views
1

Я просто реорганизую проект для использования 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 , он содержит только один элемент вместо двух, как и в базе данных.

Любые предложения, как это решить?

ответ

1

Я только что нашел источник проблемы.

Это был недостающий/неправильный метод равенства. :-)

0

Я не могу прокомментировать да, поэтому я должен ответить.

Я вижу одну проблему в коде (или, может быть, я не понимаю):

В IssueHistory вы используете @ManyToMany в IssueHistoryAttachment, но в IssueHistoryAttachment вы используете @ManyToOne.

По-моему, это причина вашей проблемы.

+0

Нет, также, когда я переключаюсь на @ManyToMany, эта проблема все еще существует. – Johannes

Смежные вопросы