2013-05-07 54 views
0

我一直在尋找一種方法來使用Java中的EntityManager類與我的數據庫進行交互。使用EntityManager插入到數據庫

的問題是關於我在我的數據庫中定義這兩個表:

PARENT_TABLE: 
    PK_ONE 
    PK_TWO 

CHILD TABLE: 
    PK_ONE 
    COLUMN 
    PK_TWO 

這裏是我到目前爲止所。

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.SecondaryTable; 
import javax.persistence.Table; 
import javax.persistence.PrimaryKeyJoinColumn; 

@Entity 
@Table(name="PARENT_TABLE") 
@SecondaryTable(name="CHILD_TABLE", pkJoinColumns={ 
     @PrimaryKeyJoinColumn(name="PK_ONE"), 
     @PrimaryKeyJoinColumn(name="PK_TWO")}) 
public class ExampleTbl implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="PK_ONE") 
    private String pkOne; 

    @Id 
    @Column(name="COLUMN", table="CHILD_TABLE") 
    private String column; 

    @Column(name="PK_TWO") 
    private String pkTwo; 

    //GETTERS AND SETTERS 
} 

我的問題是:

爲了能夠插入到PARENT_TABLE一個新行,我必須創建一個只有兩個字段(PK_ONE,PK_TWO),以能夠使用新的實體類merge()或persist()方法?

我將不得不創建另一個實體類來插入一個新行到我的CHILD_TABLE?

檢索與現有的數據列表我有一個方法是這樣的:

@Transactional(readOnly = true) 
public List<ExampleTbl> getFoldersList() { 
     em = emf.createEntityManager(); 
     Query q = em.createQuery("SELECT e FROM ExampleTbl e WHERE e.pkTwo = :pkTwo ORDER BY e.pkOne"); 
      q.setParameter("pkTwo", "My Test"); 
     List<ExampleTbl> result = q.getResultList(); 
     return result; 
    } 

你覺得這是做的最好的方法是什麼?

回答