使用EntityManager插入DataBase

时间:2013-05-07 19:17:44

标签: java database entitymanager

我一直在寻找一种使用Java中的EntityManager类与我的数据库进行交互的方法。

问题与我在DB中定义的这两个表有关:

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)的新Entity类才能使用merge()或persist()方法?

我是否必须创建另一个Entity类以将新行插入我的CHILD_TABLE?

要检索包含现有数据的List,我有一个类似这样的方法:

@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;
    }

你认为这是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

我认为这是一个有几个可能答案的问题。我建议在Java EE 6教程示例中查看它们设置的一些方法。您可以在http://docs.oracle.com/javaee/6/tutorial/doc/giqst.html

了解相关信息