如何在hibernate查询中使用映射字段?

时间:2013-12-27 01:09:27

标签: java hibernate hibernate-criteria

我为实体实现了一对多的关系。所以这些与另一个实体映射以传递值。

@ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="part_id")
    public Part getPart() {
        return part;

part_id doesn't create getters and setters with @column。它只与关系建立起来。

但在其他情况下,我在查询中检查这些字段。我正在尝试使用Criteria来查找值

它给了我例外org.hibernate.QueryException: could not resolve property: part_id 因为没有使用@Column属性生成getter。请问您如何在查询中使用这些字段?

如果添加getter和setter,则会提供org.hibernate.MappingException: Repeated column in mapping for entity:

谢谢,

2 个答案:

答案 0 :(得分:0)

双向协会(link)应如下所示。

@Entity
public class Troop {
    @OneToMany(mappedBy="troop")
    public Set<Soldier> getSoldiers() {
    ...
}

@Entity
public class Soldier {
    @ManyToOne
    @JoinColumn(name="troop_fk")
    public Troop getTroop() {
    ...
}       

请检查配置。如果可能,使用hibernate工具生成实体。

答案 1 :(得分:0)

不应使用数据库列的名称,而应使用持久属性的名称。在这种情况下,持久属性的名称是部分。如果目标是获取与具有给定id的部分相关的所有此类实体,则以下是要去的方式(id中的Part属性的名称假定为id):

crit.add(Restrictions.eq("part.id", partId));