2013-05-07 59 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; 
    } 

你觉得这是做的最好的方法是什么?

回答