首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA MappedSuperClass列不可空

JPA MappedSuperClass列不可空
EN

Stack Overflow用户
提问于 2015-03-21 03:31:29
回答 1查看 1.2K关注 0票数 1

我正在创建几个抽象类来抽象每个实体共享的属性,例如ID。

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

代码语言:javascript
复制
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创建了另一个抽象类,以添加一些审计信息,例如创建和最后修改日期。

代码语言:javascript
复制
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在数据库中设置createdAt和lastModifiedAt非NULLABLE字段?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-21 03:40:17

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

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

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

代码语言:javascript
复制
@MappedSuperclass
public abstract class AbstractAuditModel extends AbstractModel {

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

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

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29178924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档