2012-10-23 59 views
0

我有這樣的模型複雜的數據:數據的基礎上的JPA:映射配合物數據

@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 

我想通過使用的一個集合值來獲得A(1,X) B,C和d,而不是技術上的ID

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。

我該怎麼做?

謝謝你的幫助!

回答

1

您應該能夠使用JPQL對於這一點,像(其中:規模是數組的大小)

Select a from A a where (Select count(r) from a.refs r where r.value in :values) >=:size 
+0

感謝您對我們的答覆,但是,如果我有「A」兩個實例與「REF」大小相同的值不同,它仍然有效嗎? –

+0

我想如果有兩個相同大小的「REF」的「A」的實例,我得到一個錯誤的結果 –