1

美好的一天,伙计们。我遇到了创建标准的问题,但无法解决。这是我的对象:

    @Embeddable
    public class Pk {
    @ManyToOne(optional = false)
    @JoinColumn(name = "SUBKEY1_ID", nullable = false, 
              referencedColumnName = "ID")
    private SubKey1 subKey1;
    @ManyToOne(optional = false)
    @JoinColumn(name = "SUBKEY2_ID", nullable = false, 
              referencedColumnName = "ID")
    prviate subKey2 subKey2;
    ... getters setters
}

 @Entity
    @Table(name = "TABLENAME", schema = "SCHEMANAME")
    @AssociationOverrides({
        @AssociationOverride(name = "pk.subKey1", joinColumns =
        @JoinColumn(name = "SUBKEY1_ID")),
        @AssociationOverride(name = "pk.subKey2", joinColumns =
        @JoinColumn(name = "SUBKEY2_ID"))
    })
    public class Entity1 {
    @EmbeddedId
    private Pk pk = new Pk();
    ... other fields\getters setters
    }

所以,我想得到一些 pk.subkey1 的字段。我编写了加载整个对象的标准,之后,我可以通过 getter 获取所有必要的字段。

Criteria criteria = Entity1DAO.instance().createCriteria();
        criteria.createAlias("activity", "activity")
                .createAlias("pk.subKey1", "subKey1")
                .setProjection(Projections.projectionList()
                        .add(Projections.property("activity.product"))
                        .add(Projections.property("pk.subKey1"))
                        .add(Projections.property("field")))
                .add(Restrictions.eq("activity.prodDate", date))
                .addOrder(Order.asc("pk.subKey1.id"));

但是在这里我不能对pk添加任何限制。subKey1对象(例如-我需要通过subKey1限制记录。启用标志)-因为标准不执行与 subKey1 对象相关的表的任何连接。没关系,我可以跳过subKey1的所有记录。在 java 代码中启用= false,但很奇怪。

现在,我试图创建标准来获取对象,而不是对象的某些特定字段。

criteria.createAlias("activity", "activity")
                .createAlias("pk.subKey1", "subKey1")
                .createAlias("subKey1.zone", "zone")
                .setProjection(Projections.projectionList()
                        .add(Projections.property("activity.product.id"))
                        .add(Projections.property("subKey1.id"))
                        .add(Projections.property("subKey1.zone.id"))
                        .add(Projections.property("zone.description"))
                        .add(Projections.property("dryQty")))
                .add(Restrictions.eq("activity.prodDate", date))
                .add(Restrictions.eq("subKey1.enabled", true))
                .addOrder(Order.asc("pk.subKey1.id"));

但是条件不做任何连接(活动字段只有一个连接:()必要的表(subKey1区域表)来获取数据和sql查询粉碎异常,它无法找到列。(subkey1的字段区域是具有自己的表的对象)。

那么,我在哪里犯了错误,我如何将对象的字段称为嵌入式 id 的字段?

4

0 回答 0