2012-05-03 20 views
1

Open JPAエンティティがあり、多対多リレーションシップを正常に接続しています。今私は正常にテーブル全体を取得するが、私は本当にそのテーブルのIDをしたい。私はデータベースを後で呼び出すことで、必要なエンティティを再構築する予定です(私のプログラムの流れに従って)。 ID(またはそのテーブルの1つの列)だけが必要です。
1)エンティティBean、またはエンティティBeanを呼び出すために使用するステートレスセッションBeanでこれを制限してください。 2)JPAを使用してこれを試してみるとどうすればいいですか?テーブル全体ではなく、テーブルからIDを取得しますか?今のところオンラインで見て、私はあなたがこれを行う方法が表示されません。だから私はこれを行う方法がないと推測している。 3)戻り値を操作するだけであれば、必要なIDリストだけをユーザーに返すユーザーに返す別のクラスを作成する必要がありますか?JPAを使用して1列のみを返すことが可能

私は完全に間違っているかもしれませんが、その外観から、JPAを使用してこれを行う簡単な方法はないと思います。エンティティBeanの代わりにカスタムオブジェクトをユーザーに返さなければなりません(このカスタムオブジェクトは、現在のようにテーブル全体とは対照的にIDを保持するだけです)

私はこれが本当に関連しているとは思わないが、人々は常にコードを要求しているので、ここでgo ...

@ManyToMany(fetch=FetchType.EAGER) 
@JoinTable(name="QUICK_LAUNCH_DISTLIST", 
     [email protected](name="QUICK_LAUNCH_ID"), 
     [email protected](name="LIST_ID")) 
private List<DistributionList> distributionlistList; 

現在、レコードのコレクション全体をどのように取得していますか。私はIDだけを覚えていることを思い出してください。

try 
    { 
     //int daSize = 0; 
     //System.out.println("Testing 1.2..3...! "); 
     qlList = emf.createNamedQuery("getQuickLaunch").getResultList();    
    } 

これは私がエンティティBeanを呼び出す方法です。私はこれがプログラマチックに進んで、エンティティBeanに似たカスタムオブジェクトを作成する必要があると思っています(ただし、テーブル全体ではなく、IDをどこかに置いてください)。

あなたの考えは何ですか

おかげ

+0

今、私は、distributionlistListに必要なすべての関連DistributionListオブジェクトが含まれていることを意味する "全体表"を返します。 distributionlistList内の各DistributionListを繰り返し処理し、その.getId()を呼び出し、それらを新しいリストに格納すると何が問題になりますか? JPAはテーブル全体を返します。その抽象化は、任意の列ではなくオブジェクト全体がデータベースに格納されるためです。通常抽象を破ることは正しい答えではありません。 –

+0

さて、私はそれをする必要があります。しかし、新しいオブジェクトを作成し、quickLaunchオブジェクトの代わりにそのオブジェクトを返す必要もあります。どちらができるか。私はこの特定のインスタンスのために、その機能を持つことは素晴らしいことだと思います。 – SoftwareSavant

答えて

1

私はこの問題に対する最良の解決策を見つけたと思います。 my other stack overflow answer post

しかし、私は基本的に@ElementCollection属性を使用するリンクをクリックするのが面倒者のために...

@ElementCollection(fetch=FetchType.EAGER) 
     @CollectionTable(name="QUICK_LAUNCH_DISTLIST",[email protected](name="QUICK_LAUNCH_ID")) 
     @Column(name="LIST_ID") 
private List<Long> distListIDs; 

それをやった:
このリンクは答えになります。

1

あなたのQuickLaunchをクラスでこのような何かをしたいような音:?

@Transient 
public List<Integer> getDistributionListIds() { 
    List<Integer> distributionListIds = new LinkedList<Integer>(); 
    List<DistributionList> distributionlistList = getDistributionlistList(); 
    if (distributionlistList != null) { 
     for (DistributionList distributionList : distributionlistList) 
      distributionListIds.add(distributionList.getId()); 
    } 
    return distributionListIds; 
} 

私はあなたのゲッター/セッターと型の名前で少し推測しなければなりませんでしたDistributionListのIDの。基本的に、JPAはすでにすべての関係をうまく処理しているので、関連するオブジェクトから必要な値を取るだけです。

+0

それは私が考えていたものです。私は多対多の関係を置き換える必要がありますか?私はちょうどそれを取り除くことができ、次にそれらのIDを取得することができます...どのようにgetDistributionLIstsを呼び出していますか?私はManyToManyを維持する必要があると思う。 – SoftwareSavant

+0

定義をOneToManyに変更する可能性がありますが、ToManyの部分が必要です。結局のところ、任意のQuickLaunchに関連付けられた潜在的に多くのDistributionListsをすべて論理的に取得しようとしているのでしょうか?それはOneToManyだ。しかし、DistributionListが複数のQuickLaunchに属していれば、ManyToManyに戻ります。あなたの関係は正しく設定されており、あなたはまだそれらを操作することに慣れていないということがあります。 getDistributionListsは 'private List distributionlistList'のゲッターです。 getDistributionListIdsが機能する場合は、他に何かを変更するのはなぜですか? –

+0

JPAオブジェクトにエンティティマネージャを設定する必要はありますか?私は実際に必要なデータをどのように得ることができますか?私はトランジェント型のbtwをテストしましたが、私は戻り値の結果でそれを見ませんか? – SoftwareSavant

関連する問題