使用继承时,Hibernate ManyToMany不起作用

时间:2013-08-21 20:06:07

标签: java hibernate java-ee nhibernate-mapping

我只是重构一个Project来使用继承的Hibernate(4.2.4.Final)。但是我在ManyToMany注释方面遇到了麻烦。

我有一个像这样的基本文件类:

@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实例时,所有这些字段都正确保存在我的数据库中。

我在文件表中有2个新条目,* issue_history *表中有一个新条目,关系表中有两个正确的条目* issue_history_attachment *。

所以在这一点上,所有人都认为看起来很好。但是当我尝试读取IssueHistory实例中的值附件集时,只包含一个元素而不是两个,就像存储在数据库中一样。

有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

我刚刚找到问题的根源。

这是一种缺失/错误的等于方法。 : - )

答案 1 :(得分:0)

我不能评论是,所以我必须回答。

我在你的代码中看到一个问题(或者我可能不理解):

IssueHistory @ManyToMany IssueHistoryAttachment使用IssueHistoryAttachment@ManyToOne {{1}}正在使用{{1}}。

在我看来,这是你问题的原因。