2017-02-09 34 views
0

我需要將2個表連接到一個具有某些條件的對象。我有以下幾點:通過jpa加入一個java對象中的兩個表

@Entity 
@Table(name = "polling") 
public class Polling extends DomainIdObject { 

    @ManyToOne 
    @JoinColumn(name = "owner_id") 
    private Person owner; 

    @Column(name = "poll_name") 
    private String name; 

    @Column(name = "description") 
    private String description; 

    @ManyToMany(targetEntity = PollingSchedule.class, mappedBy = "polling", fetch = FetchType.EAGER) 
    private List<PollingSchedule> variants; 

    @Column(name = "start_time") 
    private LocalDateTime startTime; 

    @Column(name = "end_time") 
    private LocalDateTime endTime; 

    //getters and setters 

@Entity 
@Table(name = "polling_schedule") 
public class PollingSchedule extends DomainIdObject { 

    @JoinColumn(name = "polling_id") 
    private Polling polling; 

    @Column(name = "poll_var") 
    private String pollingVariant; 

    //gettters and setters 

但是當我執行下面的代碼:

Query query = getEntityManager().createNativeQuery("SELECT * FROM polling p WHERE p.id=1", Polling.class); 
List list = query.getResultList(); 
List<PollingSchedule> variants = ((Polling) list.get(0)).getVariants(); 

變種列表是空的。在數據庫表看起來如下:

polling 
|id|owner_id|poll_name|description|start_time|end_time| 

polling_schedule 
|id|polling_id|poll_var| 

所以,結果我想要的投票對象僅包含那些PollingVariants,那些在polling_schedule表相應polling_id。

我試過使用Filter,SecondaryTable註解,但它不適合我(或者我錯誤地使用它)。

我使用hibernate4和spring引導1.5.1

任何人都可以幫助我嗎?

+0

你可以使用JPQL查詢,而不是本機查詢以避免在第三行醜陋的鑄造。 – Deltharis

回答

2

我認爲PollingPollingSchedule之間的關係是一對多(非多對多)。既然你需要這些對象之間的雙向關係,你應該改變他們是這樣的:

Pooling.java

@Entity 
@Table(name = "polling") 
public class Polling extends DomainIdObject { 
    ... 
    @OneToMany(mappedBy="polling") 
    private List<PollingSchedule> variants; 
    ... 
} 

PoolingSchedule.java

@Entity 
@Table(name = "polling_schedule") 
public class PollingSchedule extends DomainIdObject { 

    @ManyToOne 
    @JoinColumn(name = "polling_id") 
    private Polling polling; 
    ... 
} 
+0

是的,這是正確的。當我嘗試使用'@ OneToMany'時,我不會使用'@ ManyToOne'。謝謝 – ZhenyaM