嵌入式密钥数据的标准

时间:2012-11-03 10:44:39

标签: java hibernate criteria-api hibernate-criteria

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

    @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对象相关的表的任何连接。没问题,我可以跳过java-code中 subKey1 启用 = 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的字段?

0 个答案:

没有答案