2017-08-24 12 views
1

@EmbeddableクラスMyEntityPKに複合主キーを含むJPAエンティティMyEntityがあります。
私は方法getThreeColumnsFromMyEntity()でネイティブSQLクエリを使用しています:JPAネイティブSQLクエリマッピングエラー?

public List<MyEntity> getThreeColumnsFromMyEntity() { 

    List<MyEntity> results = em.createNativeQuery("select pid,name,dateofbirth from (select pid,name, dateofbirth,max(dateofbirth) " 
      + "over(partition by pid) latest_dateofbirth from my_entity_table) where" 
      + " dateofbirth = latest_dateofbirth;","myEntityMapping").getResultList(); 

    return results; 

マイ@SqlResultSetMapping

私のJPAの列が命名され
@SqlResultSetMapping(
    name = "myEntityMapping", 
    entities = { 
     @EntityResult(
       entityClass = MyEntityPK.class, 
       fields = { 
        @FieldResult(name = "PID", column = "pid"), 
        @FieldResult(name = "NAME", column = "name")}), 
     @EntityResult(
       entityClass = MyEntity.class, 
       fields = { 
        @FieldResult(name = "dateofbirth", column = "dateofbirth")})}) 

@Column(name="DATEOFBIRTH")"PID""NAME"
SQLステートメントをデータベース上で直接テストしたところ、正常に動作しました。私は、Eclipse上でそれを実行すると
私は、Oracleエラーを取得:

ORA-00911 and "Error code 911 , Query: ResultSetMappingQuery [..]

私の推測ではありマッピングと間違って何かがあるが、私はそれが何であるかを見つけることができないです。

+1

何をチェックし、ここで意味のエラーについて見てみましょうORA-00911:無効な文字です。 これは、あなたに調査のヒントを与えます –

答えて

1

は、私はあなたがサブクエリの別名が欠落しているため、このエラーが発生したと仮定し、その代わりに、あなたはこれを試すことができます。

select 
    pid, 
    name, 
    dateofbirth 
from 
    (
     select 
     pid, 
     name, 
     dateofbirth, 
     max(dateofbirth) over(partition by pid) AS latest_dateofbirth 
     from 
     my_entity_table 
    ) second_result 
--  ^--------------- use an aliase name to the subquery 
where 
    second_result.dateofbirth = latest_dateofbirth 
-- ^----use the aliase name to reference to any of its fields, in your case 'dateofbirth' 

は常にORA-00911: invalid character tips

関連する問題