2

私は2つのエンティティを持っているとしましょう

public class EntityA
{
   @id
   @GeneratedValue
   @Column(name="id")
   private Long id;

   @OneToMany(mappedBy="EntityA")
   @JoinColumn(name = "entityA_id")
   private List<EntityB> entityBList;


} 

public class EntityB
{
  @Column(name = "MODEL_PERCENT")
  private BigDecimal modelPercent;

  @ManyToOne
  @joincolumn(name="entityA_id") 
  private EntityA entityA;

}

私が今欲しいのは、EntityAをフェッチするときに、modelPercentが0より大きいすべてのEntityBをフェッチするためのwhere句を追加したいということです。

この要件はこの特定の状況にのみ適用されるため、フィルターは使用しません。

例:データ:

 EntitytA table
 id 
  1
EntityB table
 id   EntitytA_Id  modelPercent
  1      1           10
  2      1           0

EntityAをフェッチするためのhqlである可能性があります。これにより、EntityA.getEntityBList()と言うと、1つのレコード(モデルのパーセントが10(ゼロより大きい)のレコード)のみが返されます。

以下のクエリを試しましたが、機能しないようです。つまり、entityBから両方のレコードを返します

select a from EntityA a,IN( a.EntityBList) b where a.id =:id and b.modelPercent>0   

いくつかの例への提案やポインタは非常に役立ちます。

ありがとう

4

1 に答える 1

0

1)
EntityAのマッピングにエラーがあります - プロパティとフィールドに同時にアクセスできます
EntityB - ID がなく、プロパティとフィールドに同時にアクセスできます
2) HQL クエリは

SELECT eA FROM EntityA LEFT JOIN eA.entityBList eB WHERE eA.id =:id AND eB.modelPercent > 0
于 2012-08-30T08:30:31.443 に答える