【问题标题】:How to use mapped field in hibernate query?如何在休眠查询中使用映射字段?
【发布时间】:2013-12-27 01:09:26
【问题描述】:

我已经为实体实现了一对多关系。因此,它们与另一个实体映射以传递值。

@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:

谢谢,

【问题讨论】:

  • 能否添加 PartVesion Pojo
  • @suresh 如果添加 pojo ,则会出现错误“org.hibernate.MappingException: Repeated column in mapping for entity:”。
  • 不,我要求发布 PartVesion POJO 类。
  • @suresh 添加了 pojo 类,请指教..
  • 您的映射错误。检查

标签: java hibernate hibernate-criteria


【解决方案1】:

双向关联(link)应如下所示。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-02
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2015-04-21
      • 2011-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多