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();
}