Hibernate manyToMany加入非@Id

时间:2016-03-15 08:52:40

标签: hibernate many-to-many

在执行多对多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对象进行过滤,所以我认为我将需要将其作为模型的一部分,而不是稍后进行显式提取。

0 个答案:

没有答案