我有一个用户类:
@Entity
public class User extends Model {
@Id
public Long id;
public String email;
public String name;
public String password;
}
和一个司机班
@Entity
public class Driver extends Model {
@Id
public Long id;
@OneToOne (cascade = CascadeType.ALL)
@Column(unique = true)
public User user;
}
我想确保 user_id 在 Drivers 表中是唯一的。但上面的代码并没有强制执行这一点。 (我可以使用相同的用户 ID 创建多个驱动程序)。
理想情况下,我不想在 User 类中添加 @OneToOne 关系,因为我的应用程序中有几个不同的角色(例如司机、教师、代理等),并且我不想用所有这些关系污染用户类。
我怎样才能实现这个目标?
我已经在模型上尝试过这段代码,并且它有效。需要注意的一件事是,您必须使用@OneToOne
注释让 ORM 知道您有对其他模型的外键引用。
该模型如下所示:
@Entity
// add unique constraint to user_id column
@Table(name = "driver",
uniqueConstraints = @UniqueConstraint(columnNames = "user_id")
)
public class Driver extends Model {
@Id
public Long id;
@OneToOne
@JoinColumn(name = "user_id")
public User user;
}
它将生成如下的进化脚本:
create table driver (
id bigint not null,
user_id bigint,
constraint uq_driver_1 unique (user_id), # unique database constraint
constraint pk_driver primary key (id)
);
因此,通过这种方法,您可以确保您拥有独特的user
参考driver
table.
附加信息
因为存在额外的约束,所以它不是由框架处理的,而是由应用于模型的数据库处理的(如那个 unique
约束),要验证输入或处理发生的异常,可以将Model.save()
or form.get().save()
表达 (保存模型) with try-catch
块来处理持久化异常.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)