1
你好我想在一個標準引用其定義爲和@Embeddable對實體休眠QueryException
@Entity
@Table(name = "B_J_P")
public class BJP implements java.io.Serializable {
private BJPId id;
private BJI bJI;
public BJP() {
}
public BJP(BJPId id, BJI bJI) {
this.id = id;
this.bJI = bJI;
}
@EmbeddedId
@AttributeOverrides({
@AttributeOverride(name = "jIId", column = @Column(name = "J_I_ID", nullable = false)),
@AttributeOverride(name = "kN", column = @Column(name = "K_N", nullable = false, length = 100)),
public BJPId getId() {
return this.id;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "J_I_ID", nullable = false, insertable = false, updatable = false)
public BJI getBJI() {
return this.bJI;
}
}
我需要從以下達到kName複合鍵的屬性:
@Embeddable
public class BJPId implements java.io.Serializable {
private long jIId;
private String kName;
public BJPId() {
}
public BJPId(long jIId, String kN) {
this.jIId = jIId;
this.kN = kN;
}
@Column(name = "J_I_ID", nullable = false)
public long getJIId() {
return this.jIId;
}
@Column(name = "K_NAME", nullable = false, length = 100)
public String getKName() {
return this.kName;
}
}
但是,當我試圖從基類到達它那裏BJP是以下條件的財產
DetachedCriteria timestampFilter = DetachedCriteria.forClass(BJP.class)
.createAlias("id","alias")
.add(Restrictions.eq("alias.kName","DataSetName"))
.setProjection(Projections.property("kName"));
我得到以下錯誤:
org.hibernate.QueryException: Criteria objects cannot be created directly on components. Create a criteria on owning entity and use a dotted property to access component property: id
at org.hibernate.loader.criteria.CriteriaQueryTranslator.getPathInfo
我應該如何制定的標準查詢,以達到kName屬性應用基於它的過濾在動態SQL上下文?
如果我沒有提供足夠的相關信息,請問我忘記了什麼提供了完整的上下文。
編輯:在Genzetto意見,我已經成功地達到了元件(至少它是不給錯誤了),但一旦我這樣做不返回任何結果:
DetachedCriteria timestampFilter = DetachedCriteria.forClass(BJP.class)
.add(Restrictions.eq("id.kName","DataSetName"))
.setProjection(Projections.property("id.kName"));
Session currentSession = sessionFactory.getCurrentSession();
Criteria query = currentSession.createCriteria(BJI.class)
.add(Subqueries.propertyEq("bJP",timestampFilter))
如在觀看的SQL是的格式
... where this_.J_INST_ID = (select this_.K_NAME as y0_ from .B_J_P this_ where this_.K_NAME=?)
它試圖將子查詢添加到根對象的ID,儘管我希望它是bJP的一部分。我如何將它添加到適當的位置?
謝謝!您的評論很有幫助,但不幸遇到了問題,請問您有什麼解決方案可以解決我當前的問題嗎? –
你有什麼問題? – Genzotto
在我的帖子頂部添加了它作爲末尾編輯 –