JPA查询中的 @transient访问字段



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

@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中有什么期望?

最新更新