Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate ManyToMany在使用继承时不起作用_Java_Hibernate_Jakarta Ee_Nhibernate Mapping - Fatal编程技术网

Java Hibernate ManyToMany在使用继承时不起作用

Java Hibernate ManyToMany在使用继承时不起作用,java,hibernate,jakarta-ee,nhibernate-mapping,Java,Hibernate,Jakarta Ee,Nhibernate Mapping,我只是重构一个项目,使用Hibernate(4.2.4.Final)和继承。但是我在很多注释上遇到了麻烦 我有这样一个基本文件类: @Entity @Table(name = "file") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "descriminator", length = 25) public abstract class File { @Id

我只是重构一个项目,使用Hibernate(4.2.4.Final)和继承。但是我在很多注释上遇到了麻烦

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

@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>();

}
@实体
@表(name=“发行历史”)
@TableGenerator(name=“tg”,table=“hibernate\u sequences”,pkColumnName=“sequence\u name”,valueColumnName=“sequence\u next\u hi\u value”,allocationSize=1)
公共类IssueHistory实现java.io.Serializable{
@身份证
@GeneratedValue(策略=GenerationType.TABLE,generator=“tg”)
@列(name=“id”,unique=true,nullable=false)
私有int-id;
//其他一些领域
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“发布\历史\附件”,joinColumns={
@JoinColumn(name=“issue\u history\u id”,nullable=false)
},反向连接列={
@JoinColumn(name=“attachment\u id”,nullable=false,unique=true)
})
私有集附件=新HashSet();
}
当我现在存储带有两个附件的IssueHistory实例时,所有这些字段都正确地保存在我的数据库中

我在文件表中得到了两个新条目,在*问题历史*表中得到了一个新条目,在关系表*问题历史*附件*中得到了两个正确条目

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


有什么建议可以解决这个问题吗?

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

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

IssueHistory
中,您使用
@manytomy
IssueHistoryAttachment
,但在
IssueHistoryAttachment
中,您使用的是
@manytomone


我认为这就是你问题的原因。

我不能评论是的,所以我必须做出回答

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

IssueHistory
中,您使用
@manytomy
IssueHistoryAttachment
,但在
IssueHistoryAttachment
中,您使用的是
@manytomone


我认为这就是你问题的原因。

我刚刚找到了问题的根源


这是一个缺少/错误的equals方法。:-)

我刚刚找到了问题的根源


这是一个缺少/错误的equals方法。:-)

不,当我切换到@ManyToMany时,这个问题仍然存在。不,当我切换到@ManyToMany时,这个问题仍然存在。