java - 使用关键组合的错误 criteria.list

标签 java hibernate criteria

实体

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

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

最佳答案

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();

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

关于java - 使用关键组合的错误 criteria.list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17455110/

相关文章:

grails - Grails-条件构建器-createCriteria

java - Maven:缺少 'target' 文件夹下的已编译类

java - Cucumber框架创建

java - 使用 maven-javadoc-plugin 将 jar 添加到 doclet 类路径

java - 使用java离线语音转文本

mysql - Hibernate 按子表的 Id 排序

java - 为什么 hibernate Criteria 不维护 criteria.list() 结果的顺序?

java - Spring+Hibernate集成: Transaction Manager doesn't work using @Transactional

java - 无法确定 : java. util.List 的类型

java - If 语句在 criteriaBuilder 中