0

我一直在寻找一种使用 Java 中的 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;
    }

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

4

1 回答 1

0

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

于 2013-05-07T19:23:28.360 回答