一对一休眠,不生成外键



我这里有4个表:注册,用户,用户角色和用户配置文件图像

Register和User以一对一的关系映射,并在Users表......中生成Register的引用这很好……

现在讨论User和Roles表之间的一对多关系,它也可以通过在Roles表中生成User表引用来完美地工作。

但是问题是在用户和配置文件图像之间一对一的工作。配置文件图像没有生成用户的引用....为什么没有在Profile Image表中生成用户引用

@Entity
@Getter
@Setter
public class Register {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;

@OneToOne(cascade = CascadeType.ALL,orphanRemoval = true,mappedBy = "register")
private User user;
}

用户

@Entity
@Getter
@Setter
public class User {
@Id
@Column(name = "User_Id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "user_id")
private UserProfileImage userProfileImage;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
@JoinColumn(name = "user_id")
private List<UserRoles> userRoles;
}

用户头像

@Entity
@Getter
@Setter
public class UserProfileImage {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name = "name")
private String name;
@Column(name = "type")
private String type;
@Column(name = "picByte", length = 100000)
private byte[] picByte;
public UserProfileImage() {
super();
}
public UserProfileImage(String name, String type, byte[] picByte) {
this.name = name;
this.type = type;
this.picByte = picByte;
}
}

User类中的配置文件映射是不正确的,并且在您的配置文件类中没有用户字段,因此它不会在配置文件类中生成用户引用。

同样,用户到角色的映射也不正确,你的用户类不会用你的映射填充角色。

试试这个:

public class User {
...
@OneToOne(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name = "PROFILE_IMAGE_ID")   // foreign key column in User table
private UserProfileImage userProfileImage;
@OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER,mappedBy="user")
private List<UserRoles> userRoles;
}

public class UserProfileImage {
...
@OneToOne(mappedBy="userProfileImage")
private User user;
...
}
public class UserRole {
...
@ManyToOne
@JoinColumn(name="USER_ID")  // foreign key column in User Role table
private User user;
...
}

最新更新