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 值

Hibernate - OneToMany - 多列

java - 如何在Java Spring中从Hibernate双向OneToMany ManyToOne中检索数据

休眠 OneToMany 和 ManyToOne?