【问题标题】:Error criteria.list using key composite使用组合键的错误标准列表
【发布时间】:2013-07-03 18:00:33
【问题描述】:

实体

@javax.persistence.Entity
@javax.persistence.Table(name = "entidade")
public class Entidade {
    private static final long serialVersionUID = -6831078183847196839L;
    @EmbeddedId
    @AttributeOverrides({
            @AttributeOverride(name = "id_titulo", column = @Column(name = "titulo_id", nullable = false)),
            @AttributeOverride(name = "id_empresa", column = @Column(name = "empresa_id", nullable = false)) })
    private PK pk;
//getter//setter
}

//PK

@Embeddable
public class PK implements Serializable {
    private static final long serialVersionUID = -5441836698300495848L;

    @javax.persistence.Column(name = "id_titulo")
    private Long titulo_id;

    @javax.persistence.Column(name = "id_empresa")
    private Long empresa_id;

        //getter // setter
}

查询正常:如果实例 pk setter

  Criteria criteria = novoCriteria();
    criteria.createAlias("id", "id");
    TituloPK pk = new TituloPK();
    pk.setEmpresa(2L);
    pk.setTitulo(6364L);
    criteria.add(Restrictions.eq("id", pk));
    criteria.list();

查询错误

   Criteria criteria = novoCriteria();
    criteria.createAlias("id", "id");
    criteria.add(Restrictions.eq("id.id_empresa", 2L));
    criteria.list();

控制台错误:*无法解析属性:id_empresa of: Entidade*

只需要按公司搜索,如果我使用约束返回上述错误。

【问题讨论】:

  • 似乎id_empresa 是列名。您需要将其替换为 Entidade -> id.javaField 类的 java 字段(可能是 id.pk,但我不知道 EmbeddedId 做了什么)
  • 将您的PK 类添加到您的问题中,以便我们检查您是否使用正确的语法来添加限制。

标签: java hibernate criteria


【解决方案1】:

Criteria 中,如您所知,您必须使用类成员的名称,而不是数据库中字段的名称。但是@AttributeOverride 注解并没有覆盖PK 类中的这个属性,而只是覆盖了Entidade 类中的这个属性。因此,您必须使用在PK 类中声明的属性名称,即id.empresa_id

所以你的代码应该是:

Criteria criteria = novoCriteria();
    criteria.createAlias("id", "id");
    criteria.add(Restrictions.eq("id.empresa_id", 2L));
    criteria.list();

在我的一个项目中,我可以重现您的错误,并可以使用可嵌入类中的参数名称来解决它。我认为它也应该对你有用。

【讨论】:

  • 我先弄错了,因为我没有看到@AttributeOverride,所以我决定删除我的答案。但现在,我认为这个解决方案是正确的。告诉我你能否用这个技巧解决你的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-11
  • 1970-01-01
  • 2015-01-02
  • 2019-08-13
  • 1970-01-01
相关资源
最近更新 更多