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;
}
これが最善の方法だと思いますか?