0

Java で EntityManager クラスを使用してデータベースとやり取りする方法を探していました。

質問は、DB で定義した次の 2 つのテーブルに関連しています。

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 に新しい行を挿入できるようにするには、2 つのフィールド (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 に答える