Java 没有外键的JPA OneToOne关联总是失败
我是JPA/Hibernate新手, 我正在创建一个简单的连接,以获取不同表中的一些数据 让我们这样看: 其目的是基于M_USER.username列获取M_配置文件数据,但您可以清楚地看到,M_配置文件表中没有外键 我只是尝试使用下面的代码,但没有结果,总是得到错误 用户实体类Java 没有外键的JPA OneToOne关联总是失败,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,我是JPA/Hibernate新手, 我正在创建一个简单的连接,以获取不同表中的一些数据 让我们这样看: 其目的是基于M_USER.username列获取M_配置文件数据,但您可以清楚地看到,M_配置文件表中没有外键 我只是尝试使用下面的代码,但没有结果,总是得到错误 用户实体类 @Entity @Table(name = "M_USER") public class User { @Id @Column(name = "id") privat
@Entity
@Table(name = "M_USER")
public class User {
@Id
@Column(name = "id")
private String uuid;
@Column(name = "email")
private String email;
@Column(name = "username")
private String username;
@OneToOne(fetch = FetchType.LAZY)
@MapsId("username")
private Profile profile;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Profile getProfile() {
return profile;
}
public void setProfile(Profile profile) {
this.profile = profile;
}
}
@Entity
@Table(name = "M_PROFILE")
public class Profile {
private String username;
private String phone;
private String address;
@Id
@Column(name = "username", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "phone")
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Basic
@Column(name = "address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
配置文件实体类
@Entity
@Table(name = "M_USER")
public class User {
@Id
@Column(name = "id")
private String uuid;
@Column(name = "email")
private String email;
@Column(name = "username")
private String username;
@OneToOne(fetch = FetchType.LAZY)
@MapsId("username")
private Profile profile;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Profile getProfile() {
return profile;
}
public void setProfile(Profile profile) {
this.profile = profile;
}
}
@Entity
@Table(name = "M_PROFILE")
public class Profile {
private String username;
private String phone;
private String address;
@Id
@Column(name = "username", nullable = false)
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Basic
@Column(name = "phone")
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Basic
@Column(name = "address")
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
我打电话时遇到了不同的错误
User user = userRepository.findByUsername("aswzen");
String phone = user.getProfile().getPhone();
比如这个
“USER0”“PROFILE\u USERNAME”:无效标识符
需要帮助,提前谢谢
注:我没有权利更改这张桌子 尝试指定联接列:
@OneToOne
@JoinColumn(name = "username", referencedColumnName = "username")
private profile profile;
此处不需要
@MapsId
。尝试指定联接列:
@OneToOne
@JoinColumn(name = "username", referencedColumnName = "username")
private profile profile;
您不需要在此处使用
@MapsId
。我建议为您的表创建第三个具有关系的表
@Entity
@Table(name = "M_USER")
public class User {
@OneToOne(fetch = FetchType.LAZY)
@JoinTable(
name = "user_profile",
joinColumns = @JoinColumn(name="user_id"),
inverseJoinColumns = @JoinColumn(name="profile_username")
)
private Profile profile;
UPDATE user_profile
SET user_id = (
SELECT id
FROM M_USER
);
UPDATE user_profile
SET profile_username = (
SELECT username
FROM M_USER
);
我建议为您的表创建具有关系的第三个表
@Entity
@Table(name = "M_USER")
public class User {
@OneToOne(fetch = FetchType.LAZY)
@JoinTable(
name = "user_profile",
joinColumns = @JoinColumn(name="user_id"),
inverseJoinColumns = @JoinColumn(name="profile_username")
)
private Profile profile;
UPDATE user_profile
SET user_id = (
SELECT id
FROM M_USER
);
UPDATE user_profile
SET profile_username = (
SELECT username
FROM M_USER
);
我不确定,但可能有必要将注释添加到getter中。它肯定会起作用。。代码已在当前环境Private profile上运行;-->使其成为资本坑打字错误..我的已经是私有配置文件。。我不确定,但可能有必要将注释添加到getter中。它肯定会起作用。。代码已在当前环境Private profile上运行;-->使其成为资本坑打字错误..我的已经是私有配置文件。。无法工作得到错误..从users user0_u0中选择user0_0.profile作为profile1_14_u14等,其中user0_0.username=?;错误消息=ORA-00904:“M_USER0_uu”。“PROFILE”:无效标识未工作,出现错误..从用户USER0_u选择USER0_u.PROFILE作为profile1_14_uu等,其中USER0_u.username=?;错误Msg=ORA-00904:“M_用户0_”。“配置文件”:无效标识我无权更改或创建表。。因此,与isi一样,该表也无权更改或创建该表。。所以这张桌子还是原样