Spring data 多对多映射的spring数据jpa审核失败

Spring data 多对多映射的spring数据jpa审核失败,spring-data,Spring Data,嗨,由于审计问题,我很难保存众多映射实体中的一个 我们使用spring数据和基本实体来管理审计信息。 这一切都很好,但对于一个多个映射,我得到了sql异常 字段“createdon”没有默认值 请在下面找到我的配置 import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.pe

嗨,由于审计问题,我很难保存众多映射实体中的一个

我们使用spring数据和基本实体来管理审计信息。 这一切都很好,但对于一个多个映射,我得到了sql异常 字段“createdon”没有默认值

请在下面找到我的配置

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;

import com.minda.iconnect.cache.CacheableEntity;

/**
 * Simple JavaBean domain object with an id property. Used as a base class for objects needing this property.
 *
 */
@SuppressWarnings("serial")
@MappedSuperclass
public class BaseEntity implements TimeStampedAuditable, Serializable, CacheableEntity{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    protected Long id;

    @Column(name = "createdon", nullable = false)
    protected Date createdOn;

    @Column(name = "updatedon")
    protected Date updatedOn;

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

    public Long getId() {
        return id;
    }

    public boolean isNew() {
        return (this.id == null);
    }

    @Override
    public Date getCreatedOn() {
        return createdOn;
    }

    @Override
    public void setCreatedOn(Date createdOn) {
        this.createdOn = createdOn;
    }

    @Override
    public Date getUpdatedOn() {
        return updatedOn;
    }

    @Override
    public void setUpdatedOn(Date updatedOn) {
        this.updatedOn = updatedOn;
    }

    @Override
    public String getCacheKey() {
        return getId() == null ? "null" : String.valueOf(getId());
    }
} 
下面提到了创建表的sql:

create table role (
    id bigint primary key not null auto_increment,
    name varchar(255) not null,
    role_code varchar(31) not null,
    createdon datetime not null,
    updatedon datetime
) engine=innodb;

create table user (
    id bigint primary key not null auto_increment,
    username varchar(255),
    firstname varchar(255) not null,
    lastname varchar(255) not null,
    email varchar(255) not null,
    createdon datetime not null,
    updatedon datetime
) engine=innodb;

create table user_role (
    id bigint primary key not null auto_increment,
    roles_id bigint not null references role(id),
    user_id bigint not null references user(id),
    createdon datetime not null,
    updatedon datetime
) engine=innodb;
我正在使用以下代码保存已存在角色的用户:

@Transactional
    @Override
    public User createUser(User user) {
        Role role = roleService.getRoleByCode("Some Role");
        List<Role> roles = new ArrayList<Role>();
        roles.add(role);
        user.setRoles(roles);
        User savedUser = userRepository.save(user);
}
保存时,我收到一个sql错误,即createdon字段没有默认值

由于该关系是jpa自行管理的实体,我不知道需要做什么才能使其可审计

谢谢,
Rohit Mishra

由于nullable=false,您可以使用


通过这种方式,JPA将在持久化实体之前设置createdOn。

在分析问题并花费一些时间后,我们意识到关系不应扩展基本实体,并且不需要对其进行审核。父实体提供了所需的信息。处理好这些关系是地下orm的工作

    @PrePersist
    protected void persistCreatedOn(){
        this.createdOn = Calendar.getInstance().getTime();
    }