gpt4 book ai didi

java - 与hibernate注解一对一关系

转载 作者:搜寻专家 更新时间:2023-10-30 20:53:01 24 4
gpt4 key购买 nike

我有这部分数据库模式: schema这个 User 实体:

@Entity
@Table(name = "user", catalog = "ats")
public class User implements java.io.Serializable{

private static final long serialVersionUID = 1L;
private String username;
private boolean enabled;
private Role role;
private ClientVersion clientVersion;
private ClientLicense clientLicense;
@JsonIgnore
private Set<NotificationHasUser> notificationHasUsers = new HashSet<NotificationHasUser>(0);

public User() {
}

public User(String username, boolean enabled) {
this.username = username;
this.enabled = enabled;
}

public User(String username, boolean enabled, Role role, Set<NotificationHasUser> notificationHasUsers) {
this.username = username;
this.enabled = enabled;
this.role = role;
this.notificationHasUsers = notificationHasUsers;
}

@Id
@Column(name = "username", unique = true, nullable = false, length = 45)
public String getUsername() {
return this.username;
}

public void setUsername(String username) {
this.username = username;
}

@Column(name = "enabled", nullable = false)
public boolean isEnabled() {
return this.enabled;
}

public void setEnabled(boolean enabled) {
this.enabled = enabled;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_role", nullable = false)
public Role getRole() {
return this.role;
}

public void setRole(Role role) {
this.role = role;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "id_clientVersion", nullable = false)
public ClientVersion getClientVersion() {
return this.clientVersion;
}

public void setClientVersion(ClientVersion clientVersion) {
this.clientVersion = clientVersion;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "pk.user")
public Set<NotificationHasUser> getNotificationHasUser() {
return this.notificationHasUsers;
}

public void setNotificationHasUser(Set<NotificationHasUser> notificationHasUsers) {
this.notificationHasUsers = notificationHasUsers;
}

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
public ClientLicense getClientLicense(){
return this.clientLicense;
}

public void setClientLicense(ClientLicense clientLicense){
this.clientLicense = clientLicense;
}
}

在我添加新的客户端许可证之前一切正常。如果我添加这个,我会收到一个无限循环:

Could not write content: Infinite recursion (StackOverflowError) (through reference chain: com.domain.User["clientLicense"]->com.domain.ClientLicense["user"]->com.domain.User["clientLicense"]->com.domain.ClientLicense["user"]->com.domain.User["clientLicense"]->com.domain.ClientLicense["user"]->com.domain.User["clientLicense"]->com.domain.ClientLicense["user"]->com.domain.User["clientLicense"]-....

这是我的 ClientLicense 实体

@Entity
@Table(name = "clientlicense", catalog = "ats")
public class ClientLicense implements java.io.Serializable{

/**
*
*/
private static final long serialVersionUID = 1L;
private Integer idClientLicense;
private Date startDate;
private Date endDate;
private int counter;
private String macAddress;
private String cpuId;
private User user;

public ClientLicense() {
}

/**
* @param startDate
* @param endDate
* @param counter
* @param macAddress
* @param cpuId
* @param users
*/
public ClientLicense(Date startDate, Date endDate, int counter, String macAddress, String cpuId, User user) {
super();
this.startDate = startDate;
this.endDate = endDate;
this.counter = counter;
this.setMacAddress(macAddress);
this.setCpuId(cpuId);
this.user = user;
}

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id_clientLicense", unique = true, nullable = false)
public Integer getIdClientLicense() {
return this.idClientLicense;
}

public void setIdClientLicense(Integer idClientLicense) {
this.idClientLicense = idClientLicense;
}


@Column(name = "startDate", nullable = false)
public Date getStartDate() {
return this.startDate;
}

public void setStartDate(Date startDate) {
this.startDate = startDate;
}

@Column(name = "endDate", nullable = false)
public Date getEndDate() {
return this.endDate;
}

public void setEndDate(Date endDate) {
this.endDate = endDate;
}


@Column(name = "counter", nullable = false)
public int getCounter() {
return this.counter;
}

public void setCounter(int counter) {
this.counter = counter;
}

/**
* @return the macAddress
*/
@Column(name = "macAddress", nullable = false)
public String getMacAddress() {
return macAddress;
}

/**
* @param macAddress the macAddress to set
*/
public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}

/**
* @return the cpuId
*/
@Column(name = "cpuId", nullable = false)
public String getCpuId() {
return cpuId;
}

/**
* @param cpuId the cpuId to set
*/
public void setCpuId(String cpuId) {
this.cpuId = cpuId;
}

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "id_username")
public User getUser() {
return this.user;
}

public void setUser(User user) {
this.user = user;
}
}

这是我的第一个 OneToOne 关系,我必须使用的正确注释是什么?我读了一些例子,但我不太明白,它们彼此不同。

最佳答案

尝试这样的事情。

public class User {
private ClientLicense clientLicense;

@OneToOne(fetch = FetchType.LAZY, mappedBy = "user")
public ClientLicense getClientLicense() {
return this.clientLicense;
}
}

public class ClientLicense {
private User user;

@OneToOne
@JoinColumn(name = "id_username")
public User getUser() {
return this.user;
}
}

关于java - 与hibernate注解一对一关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35088608/

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