在执行多对多hibernate连接时遇到一些麻烦。
使用以下数据库:
Table assetgroup: groupid, assetid
Table group: id, name
Table view asset: id, assetid, name
我正在尝试在hibernate中加入。请注意,“asset”类表示较大数据的视图,因此id列不是我想在连接中使用的列,但它是该视图的唯一元素(或者可以使用复合)
@Entity
@Table(name = "assetview")
public class AssetView {
@Column(name="assetid")
public Long assetid;
@Id @Column(name="id")
public Long id;
@Column(name="name")
public String name;
@ManyToMany(mappedBy="assets")
public List<Group> groups;
}
@Entity
@Table(name="groups")
public class Groups {
@Id @Column(name="id")
private Long id;
@Column(name="name")
public String name;
@Fetch(FetchMode.JOIN)
@ManyToMany
@JoinTable(name = "assetgroup",
joinColumns=@JoinColumn(name = "groupid"),
inverseJoinColumns=@JoinColumn(name = "assetid")
)
public List<Asset> assets;
}
以上几乎可以工作,因为我可以看到hibernate在执行查询以加入值,但是它使用的是“Asset”类中错误的id值。我需要它加入“assetid”而不是跟踪显示id使用“id”列中的值进行提取。
我认为设置referencedColumnName会有所帮助
inverseJoinColumns=@JoinColumn(name = "assetid", referencedColumnName="assetid")
但我得到的只是部署
的例外 property [...Group_assets] not found on entity [Group]
我开始认为hibernate不能做我想要的,因为我的数据库的链接不是hibernate的@Id值 - 有什么方法可以强迫它吗?
我想要稍后根据Group对象进行过滤,所以我认为我将需要将其作为模型的一部分,而不是稍后进行显式提取。