我有一个具有瞬态属性的实体:
@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
?
抱歉我的英文。提前谢谢!
答案 0 :(得分:6)
JPQL查询转换为SQL查询,SQL查询操作数据库中的数据。标记属性瞬态意味着属性不会持久保存到数据库,因此无法从数据库中查询属性。
答案 1 :(得分:1)
@Transient意味着JPA完全忽略该属性。它不能在查询中引用。
只需删除@Transient
即可。
此外,您需要为查询提供参数值:
String sqlString = "SELECT asset FROM Asset WHERE asset.locationIdentifier = :inputstr";
Query query = entityManager.createQuery(sqlString);
query.setParameter("inputstr", someValue);
答案 2 :(得分:0)
您可以在db表中添加列locationIdentifier并将其取消标记为Transient,或者不能在查询中使用此列。
答案 3 :(得分:0)
您不能在查询中使用临时成员。多数民众赞成没有意义! JPQL用于从数据库中获取内容,如果没有“locationIdentifier”,则无法将其添加到where子句中。如果没有这样的数据库字段,你会在SQL中期待什么?