我有幾個實體具有我想從SQL查詢中填充的瞬態屬性。我已經嘗試了幾件事,但還沒有找到正確的組合。Java Hibernate填充瞬態屬性
這裏有一個例子實體
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
long id;
@Size(max=1000)
String image_url;
@Transient
boolean liked;
@Transient
long numLikes;
**getters and setters** for persistent properties
public boolean isLiked() {
return liked;
}
public void setLiked(boolean liked) {
this.liked = liked;
}
public long getNumLikes() {
return numLikes;
}
public void setNumLikes(long numLikes) {
this.numLikes = numLikes;
}
我已經使用@Basic anotation並設置它的獲取方法,渴望
@Basic(fetch = FetchType.EAGER)
的干將嘗試,但似乎並沒有做任何事情。我也看到它也設置爲懶惰。
我在這裏丟失了什麼東西,會導致列名不映射到這些瞬態屬性之一?
這裏是我的impl代碼。
SQLQuery query = getCurrentSession().createSQLQuery("" +
"SELECT * ,count(likes1.liked) as numLikes " +
"FROM aboutme " +
"left JOIN " +
"(" +
" select liked, likedObject_id " +
" from likes " +
" where liked = 1" +
") as likes1 ON aboutme.id = likes1.likedObject_id " +
"left join " +
"(" +
" select likedObject_id, liked " +
" from likes " +
" where liked = 1 and profile_id = :id" +
") as likes2 on likes2.likedObject_id = aboutme.id " +
"WHERE aboutme.profile_id = :id " +
"group by aboutme.id");
query.addEntity(AboutMe.class);
query.setParameter("id",id);
return query.list();
我已經嘗試使用該
SQLQuery query = ..."Select count(value that returns properly) as {object.numLikes}..."
query.addEntity("object",Object.class),
我來到這裏的錯誤,即它不能爲財產[屬性]別名[別名]
找到列名是什麼我做錯了嗎?
瞬態屬性可能不是我想要做的事。我需要弄清楚的是如何將這些派生列映射到可以返回到前端的對象。我如何設置一個hibernate可以將這些別名列映射到屬性的對象?
瞬態標記爲永遠不應參與數據庫持久性的字段/方法。他們不是持久的。爲什麼你需要像這樣註解這些字段,原因是什麼? – Vaelyr
好吧,也許瞬態屬性不是我需要去的路線。我有一對多的關係。爲喜歡的部分。也許我應該返回列表中的兩個對象並運行它?有沒有辦法返回不屬於表實體的派生屬性?你是怎麼做到的? –