Hibernate OneToMany 关联在主要以外
Posted
技术标签:
【中文标题】Hibernate OneToMany 关联在主要以外【英文标题】:Hibernate OneToMany association on other than primary 【发布时间】:2015-08-21 19:58:26 【问题描述】:我正在尝试使用除主列之外的列在两个表之间建立一对多关系。我想要 Asset.assetnum 和 SoftLink.assetnum 之间的连接。我使用的是hibernate 4,它总是在主节点之间产生关系。
在 this_.ASSETID=soft3_.ASSETNUM
上从 ASSET this_left outer join SOFTLINKS soft3_我真正想要的
在 this_.ASSETNUM=soft3_.ASSETNUM
上从 ASSET this_left outer join SOFTLINKS soft3_如果我遗漏了什么,请提出建议。
@Entity
@Table(name="ASSET")
public class Asset
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="ASSETID", nullable = false)
private int assetid;
@Column(name="ASSETNUM", nullable = true)
private String assetnum;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "asset")
private List<SoftLinks> softlinks = new ArrayList<SoftLinks>();
@Entity
@Table(name="SOFTLINK")
public class SoftLinks
@Id
@Column(name="SOFTLINKID", nullable = false)
private String softlinkid;
@Column(name="ASSETNUM", nullable = true)
private String assetnum;
@ManyToOne
@JoinColumn(name = "ASSETNUM", insertable = false, updatable = false)
private Asset asset;
【问题讨论】:
看JoinColumn的javadoc:docs.oracle.com/javaee/6/api/javax/persistence/… 谢谢。效果很好。 【参考方案1】:在SoftLinks
类中,您需要将@ManyToOne
关联更改为:
@ManyToOne
@JoinColumn(name = "ASSETNUM", referencedColumnName = "ASSETNUM", insertable = false, updatable = false)
private Asset asset;
【讨论】:
以上是关于Hibernate OneToMany 关联在主要以外的主要内容,如果未能解决你的问题,请参考以下文章
JPA、Spring、Hibernate 加载实体 OneToMany 关联的问题
码农小汪-Hibernate学习8-hibernate关联关系注解表示@OneToMany mappedBy @ManyToMany @JoinTable
Hibernate @OneToMany 关联尝试设置空 FK 值