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