user
2つのテーブルがあるとしましょうdomain
。ユーザーは1つのドメインを持つことができ、1つのドメインは多くのユーザーのためのものである可能性があります。したがって、単方向の多対1を実行します。
@Entity
@Table(name = "DOMAIN")
public class Domain implements Serializable
{
@Id
@Column(name = "DOMAIN_ID")
private Integer domainId;
@Column(name = "NAME")
private String domainName;
}
@Entity
@Table(name = "\"USER\"")
public class User implements Serializable
{
@Id
@GeneratedValue(generator = "USER_SEQ")
@GenericGenerator(name = "USER_SEQ", strategy = "sequence", parameters = @Parameter(name = "sequence", value = "SEQ_USER_ID"))
@Column(name = "USER_ID", nullable = false)
private Long userId;
@Column(name = "FIRST_NAME")
private String firstName;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "DOMAIN_ID")
@ForeignKey(name = "DOMAIN_ID")
private Domain domain;
}
Domain
テーブルは不変の辞書です。User
編集可能なテーブルですが。
新しいユーザーが作成されるドメインをユーザーが選択する基本的なフォームを作成しています。私のコントローラーがそれらのデータを受け取ったとしましょう:
Integer domainId = 1;
String firstName = "aaa";
だから私は新しいユーザーを作成しています:
User newUser = new User();
newUser.setFirstName( firstName );
今私の質問が来ます、私はこのようにすべきですか?
Domain domain = somthingThatWillFetchObjectFromDb.getDomain( domainId );
newUser.setDomain( domain );
//save user
これにより、ドメインをフェッチするための追加のselectが生成されます。もちろんInteger domainId
、POJOの代わりに使用することもできますが、それはORMではありません。それでもう一度質問ですが、これはそれが行われるべき方法ですか?