7
我在繼承和@PrePersist註釋有一些問題。 我的源代碼如下所示:@PrePersist與實體繼承
_The「基地」類的註解updateDates()方法:
@javax.persistence.Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Base implements Serializable{
...
@Id
@GeneratedValue
protected Long id;
...
@Column(nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date creationDate;
@Column(nullable=false)
@Temporal(TemporalType.TIMESTAMP)
private Date lastModificationDate;
...
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getLastModificationDate() {
return lastModificationDate;
}
public void setLastModificationDate(Date lastModificationDate) {
this.lastModificationDate = lastModificationDate;
}
...
@PrePersist
protected void updateDates() {
if (creationDate == null) {
creationDate = new Date();
}
lastModificationDate = new Date();
}
}
_現在「兒童」類,要繼承所有方法「和註釋「從基類:
@javax.persistence.Entity
@NamedQueries({
@NamedQuery(name=Sensor.QUERY_FIND_ALL, query="SELECT s FROM Sensor s")
})
public class Sensor extends Entity {
...
// additional attributes
@Column(nullable=false)
protected String value;
...
// additional getters, setters
...
}
如果我保存/持續的基類的實例到數據庫中,一切工作正常。日期正在更新。 但現在,如果我想堅持一個子實例,數據庫拋出以下異常:
MySQLIntegrityConstraintViolationException: Column 'CREATIONDATE' cannot be null
所以,在我看來,這是因爲兒童造成法「@PrePersist保護無效updateDates()」在將實例持久化到數據庫之前不會調用/調用。
我的代碼有什麼問題?