Hibernate 未在DB中创建JPA@Version
当我使用JPA持久化实体时,我的版本列没有得到更新/设置。我正在使用HibernateJPA。版本是自动创建的还是必须手动创建的 我有一个抽象基类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; }
@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属性,因此不确定它是否映射不正确