Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Postgres串行非空约束_Java_Postgresql_Jpa - Fatal编程技术网

Java Postgres串行非空约束

Java Postgres串行非空约束,java,postgresql,jpa,Java,Postgresql,Jpa,我有以下数据库表: CREATE TABLE company ( id serial NOT NULL, name character varying(50), activestatus boolean, address bigint, remarks character varying(1024), revision integer ) CREATE TABLE company_version ( id serial NOT NULL, company_id

我有以下数据库表:

CREATE TABLE company
(
  id serial NOT NULL,
  name character varying(50),
  activestatus boolean,
  address bigint,
  remarks character varying(1024),
  revision integer
)

CREATE TABLE company_version
(
  id serial NOT NULL,
  company_id integer,
  name character varying(50),
  revision serial NOT NULL,
  revision_previous integer,
  revision_timestamp timestamp without time zone,
  revision_comment character varying(100),
  revision_userid character varying(50)
)
在company表中,我有一个触发器,它在插入之后执行

INSERT INTO company_version (company_id,name,revision_previous,revision_timestamp,revision_comment,revision_userid)
                                VALUES (NEW.id, NEW.name, (SELECT MAX(revision) FROM company_version),CURRENT_TIMESTAMP,'Inserted in application','The application')
                                RETURNING revision into revision_param;
            UPDATE company SET revision = revision_param WHERE id = NEW.id;
当我插入一个新公司时,公司版本表会像它应该的那样被添加。但是,当我在Java中创建一个新的CompanyVersion对象,并让它通过JPA持久化时,在“revision”列上会出现一个NOTNULL约束错误

这是我尝试执行的代码:

final CompanyVersion cv = new CompanyVersion();
cv.setCompanyId(c);
cv.setName(c.getName());

cv.setRevisionTimestamp(new Date());
cv.setRevisionComment("Updated in application");
cv.setRevisionUserid("The application");
cv.setRevisionPrevious(this.findLatestVersion(c));

this.persist(cv);
这是我的公司版本对象:

public class CompanyVersion {

    private static final long serialVersionUID = 1L;
    @Id
    @SequenceGenerator(name = "company_version_id_seq", sequenceName = "company_version_id_seq", allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "company_version_id_seq")
    @Basic(optional = false)
    @Column(name = "id")
    private Integer id;
    @Size(max = 50)
    @Column(name = "name")
    private String name;
    @OneToMany(mappedBy = "revisionPrevious", fetch = FetchType.LAZY)
    private List<CompanyVersion> previousRevisionList;
    @JoinColumn(name = "revision_previous", referencedColumnName = "revision")
    @ManyToOne(fetch = FetchType.LAZY)
    private CompanyVersion revisionPrevious;
    @JoinColumn(name = "company_id", referencedColumnName = "id")
    @ManyToOne(fetch = FetchType.LAZY)
    private Company companyId;
    @Column(name = "revision_timestamp")
    @Temporal(TemporalType.TIMESTAMP)
    private Date revisionTimestamp;
    @Size(max = 100)
    @Column(name = "revision_comment")
    private String revisionComment;
    @Size(max = 50)
    @Column(name = "revision_userid")
    private String revisionUserid;
    @Basic(optional = false)
    @Column(name = "revision")
    protected Integer revision;

    public CompanyVersion() {
    }

    public CompanyVersion(Integer id) {
        this.id = id;
    }

    public CompanyVersion(Integer id, int revision) {
        this.id = id;
        this.revision = revision;
    }

    public Integer getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<CompanyVersion> getPreviousRevisionList() {
        return previousRevisionList;
    }

    public void setPreviousRevisionList(List<CompanyVersion> previousRevisionList) {
        this.previousRevisionList = previousRevisionList;
    }

    public CompanyVersion getRevisionPrevious() {
        return revisionPrevious;
    }

    public void setRevisionPrevious(CompanyVersion revisionPrevious) {
        this.revisionPrevious = revisionPrevious;
    }

    public Company getCompanyId() {
        return companyId;
    }

    public void setCompanyId(Company companyId) {
        this.companyId = companyId;
    }

    public Date getRevisionTimestamp() {
        return revisionTimestamp;
    }

    public void setRevisionTimestamp(Date revisionTimestamp) {
        this.revisionTimestamp = revisionTimestamp;
    }

    public String getRevisionComment() {
        return revisionComment;
    }

    public void setRevisionComment(String revisionComment) {
        this.revisionComment = revisionComment;
    }

    public String getRevisionUserid() {
        return revisionUserid;
    }

    public void setRevisionUserid(String revisionUserid) {
        this.revisionUserid = revisionUserid;
    }

    public Integer getRevision() {
        return revision;
    }

    public void setRevision(Integer revision) {
        this.revision = revision;
    }
}
公共类公司版本{
私有静态最终长serialVersionUID=1L;
@身份证
@SequenceGenerator(name=“company\u version\u id\u seq”,sequenceName=“company\u version\u id\u seq”,allocationSize=1)
@GeneratedValue(策略=GenerationType.SEQUENCE,generator=“公司版本号”
@基本(可选=假)
@列(name=“id”)
私有整数id;
@尺寸(最大值=50)
@列(name=“name”)
私有字符串名称;
@OneToMany(mappedBy=“revisionPrevious”,fetch=FetchType.LAZY)
私有列表以前的修订列表;
@JoinColumn(name=“revision\u previous”,referencedColumnName=“revision”)
@manytone(fetch=FetchType.LAZY)
私人公司版本修订之前;
@JoinColumn(name=“company\u id”,referencedColumnName=“id”)
@manytone(fetch=FetchType.LAZY)
私人公司ID;
@列(name=“revision\u timestamp”)
@时态(TemporalType.TIMESTAMP)
私人日期修改时间戳;
@尺寸(最大值=100)
@列(name=“修订\注释”)
私人字符串修改注释;
@尺寸(最大值=50)
@列(name=“revision\u userid”)
私有字符串修改用户ID;
@基本(可选=假)
@列(name=“revision”)
受保护的整数修订;
上市公司版本(){
}
上市公司版本(整数id){
this.id=id;
}
上市公司版本(整数id,整数版本){
this.id=id;
这个。修订=修订;
}
公共整数getId(){
返回id;
}
公共无效集合id(整数id){
this.id=id;
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
公共列表getPreviousRevisionList(){
返回以前的修改列表;
}
public void setPreviousRevisionList(列表previousRevisionList){
this.previousRevisionList=previousRevisionList;
}
上市公司版本getRevisionPrevious(){
返回修正前;
}
public void setRevisionPrevious(公司版本修订Previous){
this.revisionPrevious=revisionPrevious;
}
上市公司getCompanyId(){
返回公司ID;
}
公共无效设置公司ID(公司ID){
this.companyId=companyId;
}
公共日期getRevisionTimestamp(){
返回修改时间戳;
}
public void setRevisionTimestamp(日期修订时间戳){
this.revisionTimestamp=修订时间戳;
}
公共字符串getRevisionComment(){
返回修改意见;
}
public void setRevisionComment(字符串revisionComment){
this.revisionComment=修订注释;
}
公共字符串getRevisionUserid(){
返回修订用户ID;
}
public void setRevisionUserid(字符串revisionUserid){
this.revisionUserid=revisionUserid;
}
公共整数getRevision(){
返回修订;
}
公共void setRevision(整数版本){
这个。修订=修订;
}
}
我已经尝试在修订版上添加
@SequenceGenerator
@GeneratedValue
注释,但到目前为止没有成功(
@GeneratedValue
由于某些原因不允许在两个字段上使用)

我不认为我应该选择最新版本,添加一个,然后在我的backingbean中执行
cv.setRevision()
方法。但到目前为止,我认为这是唯一的解决办法


那么,如何让
修订版
字段自动插入?

将我的JPA实体从

@Basic(optional = false)
@Column(name = "revision")
protected Integer revision;


成功了

您需要找到一种方法来告诉您的混淆层(又名ORM)通过在
INSERT
语句中不列出
revision
列,或者在生成的
INSERT
语句中告诉它使用
DEFAULT
而不是
NULL
来不为
revision
列提供任何值。@a_horse__没有名称,因此在我的情况下,我需要告诉EclipseLink忽略
revision
插入时的字段?insertable=false对我有效,使用Postgresql10
@Basic(optional = false)
@Column(name = "revision")
protected Integer revision;
@Basic(optional = false)
@Column(name = "revision", insertable = false)
protected Integer revision;