0

私はこのモデルの複雑なデータを持っています:

@Entity
public class A {
    @id
    public Long id;

    @Column
    public String code;

    @OneToMany
    @JoinTable(name = "A_REF",
    joinColumns = @JoinColumn(name = "ID_A"),
    inverseJoinColumns = @JoinColumn(name = "ID_REF"))
    public Set<AbstractRef> refs;

}


@Entity
@Table("T_REF")
@DiscriminatorColumn(name="type")
public abstract class AbstractRef {
    @id
    public Long id;

    @Column
    public String value;
}



@Entity
@DiscriminatorValue(value="B")
public class B extends AbstractRef {
}



@Entity
@DiscriminatorValue(value="C")
public class C extends AbstractRef{
}

@Entity
@DiscriminatorValue(value="D")
public class D extends AbstractRef {
}

データベース例:

T_A
ID | NAME
1  |  X
2  |  Y

T_REF
ID | VALUE | TYPE | ID_A
1  |  H    |   B  |  1
2  |  I    |   B  |  1
3  |  H    |   B  |  2
4  |  P    |   C  |  1
5  |  O    |   C  |  1
6  |  O    |   C  |  2
7  |  Z    |   D  |  1
8  |  F    |   D  |  1
9  |  M    |   D  |  2

技術 ID ではなく、B、C、D のコレクション値を使用して A(1, X) を取得したい

List<String> values = Arrays.asList(new String[]{"H","I","P","O","Z","F"});
A aWithFunctinnalId = service.getA(values);

私の場合、値のコレクション (「H」、「I」、「P」、「O」、「Z」、「F」) が機能 ID です。

どうすればそれができますか?

ご協力ありがとうございました!

4

1 に答える 1

1

これにはJPQLを使用できるはずです( :size は配列のサイズです)

Select a from A a where (Select count(r) from a.refs r where r.value in :values) >=:size
于 2012-10-24T13:04:26.297 に答える