3

我有一个具有瞬态属性的实体:

@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]

   }

我试图locationIdentifier在 JPA 中以这种方式访问​​:

String sqlString = "SELECT asset FROM Asset WHERE asset.locationIdentifier = :inputstr";
Query query = entityManager.createQuery(sqlString);

但我得到一个错误:Cannot resolve the property locationIdentifier

我想问一下我如何locationIdentifier使用JPQL访问?

对不起我的英语不好。提前致谢!

4

4 回答 4

7

JPQL 查询转换为 SQL 查询,SQL 查询对数据库中的数据进行操作。将属性标记为瞬态意味着属性不会持久化到数据库中,因此无法从数据库中查询。

于 2012-11-01T19:10:39.460 回答
1

@Transient 表示 JPA 完全忽略该属性。它不能在查询中引用。

只需删除@Transient它应该可以工作。

此外,您需要向查询提供参数值:

String sqlString = "SELECT asset FROM Asset WHERE asset.locationIdentifier = :inputstr";
Query query = entityManager.createQuery(sqlString);
query.setParameter("inputstr", someValue);
于 2012-11-02T04:05:01.260 回答
0

您可以在 db 表中添加列 locationIdentifier 并将其取消标记为 Transient,或者您不能在查询中使用此列。

于 2013-02-15T12:10:26.963 回答
0

您不能在查询中使用临时成员。那没有意义!JPQL 用于从数据库中获取某些内容,如果没有“locationIdentifier”,则无法将其添加到 where 子句中。如果没有这样的数据库字段,您对 SQL 有什么期望?

于 2013-07-18T15:37:42.093 回答