gpt4 book ai didi

jpa - 具有唯一约束的 ebean 单向 @OneToOne 关系

转载 作者:行者123 更新时间:2023-12-04 20:12:45 24 4
gpt4 key购买 nike

我有一个用户类:

@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 。

Additional Info

Because there is an additional constraint, that is not handled by framework but by the database applied on the model (such as the unique constraint), to validate the input or handling the occurred exception, you can surround Model.save() or form.get().save() expression (saving-the-model) with try-catch block to handle the PersistenceException.

关于jpa - 具有唯一约束的 ebean 单向 @OneToOne 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com