Java Hibernate ManyToMany在使用继承时不起作用
我只是重构一个项目,使用Hibernate(4.2.4.Final)和继承。但是我在很多注释上遇到了麻烦 我有这样一个基本文件类: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
@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时,这个问题仍然存在。