我正在使用Hibernate和Spring开发一个项目;单个屏幕,一个bean,但有两个表。我想知道Hibernate是否可以在一次调用中更新两个 MySQL表?
如果是这样,我如何编写以下bean(模型)来更新两个表!
用户名和密码位于用户表中。 用户名和启用位于权限表中。
以下是我的代码:
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue
@Column(name = "userid")
private Long userId; // in user and rights tables!
@NotEmpty(message = "User name must not be blank.")
@Size(max = 20)
@Column(name = "username", nullable = false, length = 20)
private String username; // in user table
@NotEmpty(message = "Password must not be blank.")
@Size(max = 20)
@Column(name = "password", nullable = false)
private String password; // in user table
@Column(name = "enabled")
private Long enabled; // in rights table
}
答案 0 :(得分:8)
您需要使用@SecondaryTable注释,并在相应的@Column注释中指定该表的名称:
@Entity
@Table(name="users")
@SecondaryTable(name="rights", pkJoinColumns=
@PrimaryKeyJoinColumn(name="userid", referencedColumnName="userid")
)
public class User {
...
@Column(name = "enabled", table="rights")
private Long enabled; // in rights table
答案 1 :(得分:0)
我很确定你不能这样做。在某种意义上,ORM是将一行映射到一个对象。您可以做的最好的事情是使用SQL视图来创建与此bean相对应的只读结构。这样您就可以将数据查询到您设计的结构中,但是您将无法进行更新。
答案 2 :(得分:0)
如果您要求它在不同的表格中,请执行以下操作
class User {
Long userid;
String username; // why both a userid and a username?
String password;
Rights rights;
}
class Rights {
boolean enabled;
boolean canModerate;
int maxSomething;
// other rights here
}