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]

   }

locationIdentifierJPAでこの方法でアクセスしようとしました:

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

しかし、エラーが発生しました:Cannot resolve the property locationIdentifier

locationIdentifierJPQLを使ったアクセス方法を教えてください。

私の英語でごめんなさい。前もって感謝します!

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 に答える