gpt4 book ai didi

java - JPA MappedSuperClass 列不可为空

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:33 27 4
gpt4 key购买 nike

我正在努力创建一些抽象类来抽象每个实体将共享的属性,例如 ID。

我创建了一个 AbstractModel 类,如下所示。

import javax.persistence.*;
import java.io.Serializable;

@MappedSuperclass
public abstract class AbstractModel implements Serializable {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
protected Long id;

public Long getId() {
return id;
}

public void setId(Long id) {
this.id = id;
}

@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

@Override
public abstract String toString();
}

我使用扩展 AbstractModel 创建了另一个抽象类来添加一些审核信息,例如创建日期和上次修改日期。

import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;

import javax.persistence.MappedSuperclass;
import java.util.Date;

@MappedSuperclass
public abstract class AbstractAuditModel extends AbstractModel {

@CreatedDate
protected Date createdAt;

@LastModifiedDate
protected Date lastModifiedAt;

@Override
public abstract int hashCode();

@Override
public abstract boolean equals(Object obj);

@Override
public abstract String toString();
}

我正在使用 JPA/Hibernate 创建数据库。没有物理数据库,Hibernate 将生成并更新架构(代码优先方法)。

我的问题是如何强制 JPA/Hiberante 在数据库中创建 createAt 和 lastModifiedAt NON NULLABLE 字段?

我知道我可以使用 Java 验证和 Hibernate 验证来防止应用程序插入空值,但我希望数据库也强制执行它,以防有人决定手动插入数据库。

最佳答案

您可以使用 @Column 注释来定义如何生成架构的元数据,该注释具有一些属性来定义如何创建列,例如 nullable 属性指示该列是否不允许空值。

这些属性特定于模式生成过程,不能在运行时作为验证,正如您提到的可以使用 BeanValidations。您可以检查@Column注释here的所有属性

在您的示例中,您可以这样使用:

@MappedSuperclass
public abstract class AbstractAuditModel extends AbstractModel {

@CreatedDate
@Column(nullable = false)
protected Date createdAt;

@LastModifiedDate
@Column(nullable = false)
protected Date lastModifiedAt;

}

关于java - JPA MappedSuperClass 列不可为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29178924/

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