我有一个具有瞬态属性的实体:
@Entity
@Table(name = "asset")
public class Asset {
@Transient
private String locationIdentifier = "N/A";
@SuppressWarnings("unused")
@PostLoad
private void onPostLoad() {
if (location != null) {
locationIdentifier = location.getIdentifier();
}
}
[other stuffs]
}
我尝试在JPA中以这种方式访问locationIdentifier
:
String sqlString = "SELECT asset FROM Asset WHERE asset.locationIdentifier = :inputstr";
Query query = entityManager.createQuery(sqlString);
但是我有一个错误: Cannot resolve the property locationIdentifier
我想问我如何使用JPQL访问locationIdentifier
?
对不起,我的英语。预先感谢!
jpql查询被转换为SQL查询,而SQL查询将操作到数据库中的数据。标记属性瞬态意味着属性不持续到数据库,因此无法从数据库中查询。
@transient表示属性完全被JPA忽略。它不能在查询中引用。
只需删除@Transient
即可起作用。
另外,您需要为查询提供参数值:
String sqlString = "SELECT asset FROM Asset WHERE asset.locationIdentifier = :inputstr";
Query query = entityManager.createQuery(sqlString);
query.setParameter("inputstr", someValue);
您要么在db表中添加列位置识别仪,然后将其添加为瞬态,要么不能在查询中使用此列。
您不能在查询中使用瞬态成员。那是没有意义的!JPQL用于从数据库中获取一些东西,如果没有"位置识别符",则不能将其添加到您的句子中。如果没有这样的数据库字段,您会期望在SQL中有什么期望?