美好的一天,伙计们。我已经遇到了创建标准的问题而无法解决问题。 这是我的对象:
@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的字段?