私は、列を結合することで、entiryをdbに保存する方法について混乱しています。私は、フィールドpscUser(ここではヌル)せずにユーザーインスタンスを保存するが、私はデシベルで空CuratorUserIdの状況で終わる正しい値を持つ有効なCuratorUserIdがある場合、私は参加するエンティティを永続化する方法
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.FIELD)
@Entity
@Table(name = "psc_users")
@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = 8885916014620036457L;
@Id
private static final String SEQUENCE_NAME = "psc_users_user_id_seq";
@Id
@GeneratedValue(generator = "UseExistingOrGenerateIdGenerator",
strategy = GenerationType.SEQUENCE)
@GenericGenerator(name = "UseExistingOrGenerateIdGenerator",
strategy = "com.psc.util.UseExistingOrGenerateIdGenerator",
parameters = {
@org.hibernate.annotations.Parameter(name = "sequence", value = SEQUENCE_NAME)
}
)
@Column(name = "USER_ID")
private Long userId;
@Column(name = "DEF", length = 30)
private String def;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DEL_DATE")
private Date delDate;
@Column(name = "DISPLAY_DEF", length = 60)
private String displayDef;
@Column(name = "EMAIL", length = 60)
private String email;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "NAVI_DATE")
private Date naviDate;
@Column(name = "NAVI_USER")
private String naviUser;
@Column(name = "PHONE", length = 30)
private String phone;
@Column(name = "PWD", length = 40)
private String pwd;
//bi-directional many-to-one association to Branch
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "BRNC_BRNC_ID", nullable = false)
private Branch pscBranch;
public Long getBrncBrncId() {
return brncBrncId;
}
public void setBrncBrncId(Long brncBrncId) {
this.brncBrncId = brncBrncId;
}
@Column(name = "BRNC_BRNC_ID", insertable = false, updatable = false)
private Long brncBrncId;
//bi-directional many-to-one association to User
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "CURATOR_USER_ID")
private User pscUser;
public Long getCuratorUserId() {
return curatorUserId;
}
public void setCuratorUserId(Long curatorUserId) {
this.curatorUserId = curatorUserId;
}
@Column(name = "CURATOR_USER_ID", insertable = false, updatable = false)
private Long curatorUserId;
public User() {
}
public Long getUserId() {
return this.userId;
}
public void setUserId(Long userId) {
this.userId = userId;
}
public String getDef() {
return this.def;
}
public void setDef(String def) {
this.def = def;
}
public Date getDelDate() {
return this.delDate;
}
public void setDelDate(Date delDate) {
this.delDate = delDate;
}
public String getDisplayDef() {
return this.displayDef;
}
public void setDisplayDef(String displayDef) {
this.displayDef = displayDef;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public Date getNaviDate() {
return this.naviDate;
}
public void setNaviDate(Date naviDate) {
this.naviDate = naviDate;
}
public String getNaviUser() {
return this.naviUser;
}
public void setNaviUser(String naviUser) {
this.naviUser = naviUser;
}
public String getPhone() {
return this.phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getPwd() {
return this.pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public Branch getPscBranch() {
return this.pscBranch;
}
public void setPscBranch(Branch pscBranch) {
this.pscBranch = pscBranch;
}
public User getPscUser() {
return this.pscUser;
}
public void setPscUser(User pscUser) {
this.pscUser = pscUser;
}
}
を怒鳴る@Entity持っています。コードを見ると、これらの結合されたフィールドが表示されます。
@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name = "CURATOR_USER_ID")
private User pscUser;
@Column(name = "CURATOR_USER_ID", insertable = false, updatable = false)
private Long curatorUserId;
ユーザー
repositoryUser.save(user);
に私は私のユーザーを保存した後、データベースに参照
このデバッガで見、これを保存するためのコード。私の愚かな質問には申し訳ありません
が、私は別の行動に出くわす、別の方法で振る舞う私のプロジェクトのコードがあります。クエリ上のオーバーヘッドのために実際の別のユーザー(キュレーター)を検索したくないです。
を参照してください。そうすれば、ヌル参照を持つオブジェクトを永続化し、ヌル(ヌルFK列)を維持する必要があります。また、オブジェクトを取得すると、nullが取得されます(FK列はデータストア内でnullなので)。そして?! –
私はオブジェクトを指定しなかったときに練習をしています(:id: – Alex
)IDだけを持っていればオブジェクト関係はなく、JPAはオブジェクト関係のために設計されています –