5
package com.abc.def.model;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Embeddable;
import javax.persistence.IdClass;
import java.util.Date;
import java.io.Serializable;



@NamedNativeQuery(name="getMetadata",query="
                  select a.name alias1,a.fullname alias2,
                         b.name alias3,b.age alias4,
                         c.height alias5,c.something alias6,
                         d.otherthing alias7
                  from lame_table_name a,
                       lame_table_name_2 b
                  where a.id = b.id
                     and b.id = c.id 
                     and c.id = d.id 
                     and d.id = :namedparameter
                  order by a.index,b.index
               ",
            resultClass=MetadataModel.class)


  @Entity
  @IdClass(SomeIdClass.class)

  public class MetadataModel{

  @Id @Column("alias1")
  private Type alias1property;

  @Id @Column("alias2")
  private Type2 alias2property;

  @Column("alias3")
  private Type3 alias3property;

  //getters and setters
  }

  @Embeddable
  class SomeIdClass implements Serializable{

  //serialVersionUID line

  @Id @Column("alias1")
  private Type alias1property;

  @Id @Column("alias2")
  private Type2 alias2property;

  //getter and setters
  }

エラーは SQL-17006 です。列名が無効です。このセットアップのバリエーションを 1 日中試しています。Column("lame_table_name.name")

また、SqlResultSetMapping を使用してみました (そして、POJO のフィールドから @Column を削除しました) (および、SqlResultSetMapping の列属性にすべての列エイリアスを指定しました) (SQLQuery インターフェースの setResultSetMapping メソッドを介してクエリを実行するときに、結果セットマッピングを再度指定することになっていますか? ?)

package com.abc.def.model;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Entity;
import javax.persistence.Embeddable;
import javax.persistence.IdClass;
import java.util.Date;
import java.io.Serializable;
//other imports for the SqlResultSetMapping



@NamedNativeQuery(name="getMetadata",query="
                  select a.name alias1,a.fullname alias2,
                         b.name alias3,b.age alias4,
                         c.height alias5,c.something alias6,
                         d.otherthing alias7
                  from lame_table_name a,
                       lame_table_name_2 b
                  where a.id = b.id
                     and b.id = c.id 
                     and c.id = d.id 
                     and d.id = :namedparameter
                  order by a.index,b.index
               ",
            resultSetMapping="metaDataMapping")


@SqlResultSetMapping(name="metaDataMapping",
              entities=@EntityResult(entityClass=MetadataModel.class,
                fields = {@FieldResult(name="alias1Property",column="alias1")
                           //so on
                      }

                 )
            )

  @Entity
  @IdClass(SomeIdClass.class)

  public class MetadataModel{


  private Type alias1property;


  private Type2 alias2property;


  private Type3 alias3property;

  //getters and setters
  }

  //composite class, exactly as above
4

4 に答える 4

0

前に、結果セット マッピングで列とエンティティの両方の属性を指定しようとしていたので、エンティティ マッピングを削除して、列の属性を保持し、aliastobean 結果トランスフォーマーを呼び出して、Long の代わりに BigDecimal を受け入れるようにセッターを作成してみました (そのOracle DB)、問題を解決しました...

于 2012-10-14T07:11:00.047 に答える
0

@Column(name = "myprop")代わりに試してください。また、Type/Type2/Type3 は Simple 型 (通常は Integer/Long/String/Date) でなければならないことに注意してください。

于 2012-10-12T14:35:19.270 に答える