1

Javaee6環境のプロバイダーとして休止状態のJPA2を使用しています。

私は1対多の関係を持っており、片側のすべての行をJSFページに表示するときに、多くの側のプロパティの一部を表示したいのですが、すべてではありません**。多くのサイドエンティティにデータを入力しますが、その方法がわかりません。

これがスニペットです

テーブルAのすべての行を取得してjsfテーブルに表示したいのですが、テーブルAの行を表示するときに、テーブルBの一部のプロパティも同じjsfテーブルに表示したいのですが、理想的には、テーブルから未使用のプロパティを取得/保存することすらしません。 B

TBL_A
________________
int     ID
varchar FIRSTNAME
varchar LASTNAME

そして2番目は

TBL_B
___________
int      ID
varchar  VERSION  // display on jsf page
varchar  XML_DATA //large, don't want to load when getting results for A/B join
int      A_ID     

そして私のJPA2関連クラスはそうです

@Entity
@Table(name = "TBL_A")
@NamedQueries // not sure what sql to create to accomplish this?
({ @NamedQuery(name = "A_and_B.findAll", query = "SELECT a FROM EntityA a") })

public class EntityA implements Serializable 
{    
   @Id
   @GeneratedValue(strategy=GenerationType.IDENTITY)
   @NotNull
   @Column(name = "ID", nullable = false)
   private Integer id;
.

@Column(name = "FIRSTNAME")
private String firstname;
.
@Column(name = "LASTNAME")
private String lastname;
.
@OneToMany(mappedBy = "entityA", fetch = FetchType.EAGER)
private List<EntityB> entityBList;

私のTBL_B関連エンティティは

@Entity
@Table(name = "TBL_B")  
public class EntityB implements Serializable 
{ 
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@NotNull
@Column(name = "ID", nullable = false)
private Integer id;
.        
@Column(name = "VERSION")
private String version;
.
@Column(name = "XML_DATA")
private String xmlData;
.
@JoinColumn(name = "A_ID", referencedColumnName = "ID")
@ManyToOne
private EntityA entityA;    

TBL_Aのすべての行を取得するときに、TBL_Aエントリのデータテーブル/リストとTBL_BのVERSION列を表示するJSFページがあります。

それを行うには、休止状態のレイジーインスタテーションエラーを回避するために、フェッチタイプのEAGERを使用する必要がありました。それが正しい方法であることを願っています。

すべてのTBL_Bエンティティをロードするとき、entityBListのすべてのTBL_B行を熱心にロードしてもかまわないと思いますが、EntityB BeanのリストにxmlDataプロパティがロードされることは望ましくありません。これは、非常に大きいためです。

誰かが私がこれを行う方法を説明できますか?

名前付きクエリでこれを実現するにはどうすればよいですか

public List<EntityA> findAll_A_Entities() 
{
   return em.createNamedQuery("A_and_B.findAll", EntityA.class).getResultList();
}
4

1 に答える 1

0

1 つの解決策は、プロパティを遅延させることですが、追加のビルド構成が必要です。ドキュメントを参照してください。

もう 1 つのオプションは、xmlData フィールドを派生クラスに移動し、休止状態の継承サポートを使用することです。

EntityB を直接クエリしていた場合は、射影クエリを使用して必要なフィールドのみを選択できます。それが不可能な収集協会にあるとき。

于 2011-12-01T03:53:04.637 に答える