gpt4 book ai didi

java - 如何通过加入来持久化实体?

转载 作者:行者123 更新时间:2023-11-29 12:57:45 28 4
gpt4 key购买 nike

我对如何使用列的连接在数据库中保存条目感到困惑。我有@Entity 波纹管

@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;
}

}

如果我保存没有字段 pscUser 的用户实例(此处为空),但存在具有正确值的有效 CuratorUserId,我最终会遇到数据库中 CuratorUserId 为空的情况。如果您查看代码,就会看到这些绑定(bind)字段。

  @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);

这是我在调试器中看到的

enter image description here

这是我在保存用户后在数据库中看到的。

enter image description here

抱歉我提出了愚蠢的问题,但我遇到了不同的行为,我的项目中有代码以另一种方式运行。我不想搜索实际的另一个用户(策展人)来保存我的用户,因为查询开销

最佳答案

curetorUserId 字段上的@Column 注解有属性insertable=false 和 updatable=false,这意味着它的值在插入和更新期间被忽略。

您可以将这些属性更改为 true(但它可能会在其他一些地方破坏您的应用程序)或仅使用 EntityManager.getReference 填写 pscUser 字段,这只会创建一个代理,实际上不会产生对数据库的查询.

关于java - 如何通过加入来持久化实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38846070/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com