Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
Hibernate 未在DB中创建JPA@Version_Hibernate_Jpa_Version - Fatal编程技术网

Hibernate 未在DB中创建JPA@Version

Hibernate 未在DB中创建JPA@Version,hibernate,jpa,version,Hibernate,Jpa,Version,当我使用JPA持久化实体时,我的版本列没有得到更新/设置。我正在使用HibernateJPA。版本是自动创建的还是必须手动创建的 我有一个抽象基类 @MappedSuperclass public abstract class AbstractDomainEO { private Date createdDate; @Version private Integer version; public Integer getVersion() { return version; }

当我使用JPA持久化实体时,我的版本列没有得到更新/设置。我正在使用HibernateJPA。版本是自动创建的还是必须手动创建的

我有一个抽象基类

@MappedSuperclass 
public abstract  class AbstractDomainEO {

private Date createdDate;
@Version 
private Integer version;

public Integer getVersion() {
    return version;
}

public void setVersion(Integer version) {
    this.version = version;
}
以及扩展抽象类的子实体类

@SuppressWarnings("serial")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("GENERIC")
public class ArtData extends AbstractDomainEO  implements DomainObject {
更新2。。。。 所以我决定使用另一个没有继承的简单类,只是为了让版本正常工作,但也没有运气。我的新班级:

@Entity
@Table(name = "CAR")
public class CarEO implements Car {

private Date createdDate;

@Version 
private Integer version;

public Integer getVersion() {
    return version;
}
public void setVersion(Integer version) {
    this.version = version;
}

public void setCreatedDate(Date createdDate) {
    this.createdDate = createdDate;
}

@Temporal(TemporalType.TIMESTAMP)
public Date getCreatedDate() { 
    return this.createdDate; 
}


@Id
@GeneratedValue
@Column(name = "CAR_ID")
private Integer id;
private String name;
public CarEO() {
    super();
}

@Override
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CAR_ID_SEQ")   
public Integer getId() {
    return this.id;
}

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

@Override
public String getName() {
    return this.name;
}

@Override
public void setName(String name) {
    this.name = name;
}
} 然而,对于version和createdate,我仍然得到null,但这是一个单独的问题

CarEO[createdDate=,版本=0,id=3,名称=bmw,注释=[]

这是我尝试创建时的输出,请为此EO对象选择“删除”:

[org.hibernate.cache.StandardQueryCache];使用默认值。 [调试]org.hibernate.SQL:111- 插入 进入 汽车 车辆ID、创建日期、名称、版本 价值观 空、、、

休眠: 插入 进入 汽车 车辆ID、创建日期、名称、版本 价值观 空、、、

[信息]CarDaoJPASpringTest:64-************** [调试]org.hibernate.SQL:111- 选择 careo0车号为CAR1车号, careo0_uu0.createdDate作为createdD2_u1_u0, careo0。名称为name1, careo0\u版本作为版本1\u 从…起 汽车车厢_

休眠: 选择 careo0车号为CAR1车号, careo0_uu0.createdDate作为createdD2_u1_u0, careo0。名称为name1, careo0\u版本作为版本1\u 从…起 汽车车厢_

CarEO[createdDate=,版本=0,id=3,名称=bmw,注释=[] [调试]org.hibernate.SQL:111- 删去 从…起 汽车 哪里 车号=? 和版本=? 冬眠: 删去 从…起 汽车 哪里 车号=?
和version=?

使用MappedSuperClass是不理解的。映射的超类不可查询,不能用于EntityManager或查询操作。 当EntityManager对ArtData执行DB操作时,EntityManager将对版本执行查询操作。现在,这是一个问题,因为您的版本在MappedSuperClass中。为了避免这个问题,您必须将版本放入实体或POJO类中

例1

@MappedSuperclass 
public abstract  class AbstractDomainEO {
    private Date createdDate;
}

@SuppressWarnings("serial")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("GENERIC")
public class ArtData extends AbstractDomainEO  implements DomainObject {

    @Version 
    private Integer version;

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }
}
例2

@Entity
public abstract class Parent {
    @Version 
    private Integer version;

    public Integer getVersion() {
        return version;
    }

    public void setVersion(Integer version) {
        this.version = version;
    }
}

@MappedSuperclass 
public class AbstractDomainEO extends Parent {
    private Date createdDate;
}

@SuppressWarnings("serial")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("GENERIC")
public class ArtData extends AbstractDomainEO  implements DomainObject {

}

对于MappedSuperclass。

示例2不起作用,我得到了这个异常:由:org.hibernate.AnnotationException引起:没有为实体指定标识符:com.zeltov.eo.AbstractDomainEO例如1,版本字段:ArtData[version=,id=30,name=art,picture=]我正在为我的hsqldb使用hibernate update属性,因此不确定它是否映射不正确