gpt4 book ai didi

java - 有什么方法可以在 JPA 或 Spring-data 中设置默认外键吗?

转载 作者:行者123 更新时间:2023-12-02 02:48:14 27 4
gpt4 key购买 nike

鉴于User实体类上有以下JPA注释,是否有办法设置默认Role

@Entity 
public class User {
...

@NotNull
@ManyToOne(targetEntity = Role.class, optional = false)
private Role role;

现在,我在初始 Wildfly 迁移中设置默认值,如下所示:

create table users (
id bigint generated by default as identity,
name varchar(255), pwhash varchar(255),
role_id bigint default 1 not null, <- defuault FK ID set
primary key (id));
alter table users
add constraint FKtjpac0ubm4g9y5a5qi5ivebmw foreign key (role_id)
references roles;
insert into roles (name) values ('USER');

但是,该默认值仅在 SQL 文件中可见。我也希望 JPA 中有它。

或者这种功能是在存储库/DAO 中设置的吗?

<小时/>

基于我尝试过的答案:

@Entity
public class User {
...

public final static Role DEFAULT_ROLE = new Role();
static {
DEFAULT_ROLE.setId(1L);
DEFAULT_ROLE.setName("USERS");
}

@NotNull
@ManyToOne(targetEntity = Role.class, optional = false)
private Role role = DEFAULT_ROLE;

但是,这会在 INSERT 时引发 ConstraintViolationException

最佳答案

您可以使用 @Column(columnDefinition="....") 指定确切的 SQL 来创建数据库列,包括任何默认值。

为了使 Java 表示与默认值保持一致,您可以在构造时初始化 role 字段,假设 Role.defaultRoleRole code> 您想用作默认值。显然,您必须注意默认角色是否正确附加到您的 session ,即您可能希望首先从 Session 加载它:

@NotNull
@ManyToOne(targetEntity = Role.class, optional = false)
private Role role = Role.defaultRole;

关于java - 有什么方法可以在 JPA 或 Spring-data 中设置默认外键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44234472/

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