Hibernate可以用一个bean更新两个表吗?

时间:2011-04-10 19:13:46

标签: java hibernate spring

我正在使用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
}

3 个答案:

答案 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
}