这里有张桌子

CREATE TABLE `test` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) NOT NULL,
 `lastmodifiedTimestamp` DATETIME ON UPDATE CURRENT_TIMESTAMP,
  `creationTimestamp` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 UNIQUE KEY `Unique` (`name`)
)


和一个用于Json转换以及数据库存储的Entity类。
这里的问题是,当我尝试创建Test hibernate时,给出了com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException异常:列'creationTimestamp'不能为null
但是我可以在不传递时间戳字段的情况下运行sql查询。如何使休眠状态避免在插入查询中发送这些时间戳字段?

我不能将它们标记为瞬态,因为在反序列化期间需要时间戳字段。当我为Test对象获取时。

无论如何,它给出了原因:javax.persistence.EntityNotFoundException:可能由于字段上的@Column和@Transient都不存在具有给定标识符的行

下面是实体类

@Entity
@Table(name = "test")
public class Test implements Serializable {
 private long id;
 @JsonSerialize(using = DateTimeSerializer.class)
  private DateTime creationTimestamp; //joda datetime used in response body
  @JsonIgnore                       //used in http header
  private DateTime lastModofiedTimestamp;

@Id
  @Column(name = "id")
  public long getId() {
    return id;
  }

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

  @Column(name = "creationTimestamp")
  @Type(type = "org.joda.time.contrib.hibernate.PersistentDateTime")
  public DateTime getCreationTimestamp() {
    return creationTimestamp;
  }

  public void setCreationTimestamp(DateTime creationTimestamp) {
    this.creationTimestamp = creationTimestamp;
  }
@Column(name = "lastmodifiedTimestamp")
  @Type(type = "org.joda.time.contrib.hibernate.PersistentDateTime")
  public DateTime getLastModofiedTimestamp() {
    return lastModofiedTimestamp;
  }

  public void setLastModofiedTimestamp(DateTime lastModofiedTimestamp)   {
    this.lastModofiedTimestamp = lastModofiedTimestamp;
  }
}


如果我从UI中传递了一个适当的creationTimestamp值,该值将填充json反序列化字段,则冬眠将使用它传递给插入查询。在这种情况下,它可以工作并在数据库中创建行
但是我希望这个值不从UI发送,如果发送则忽略。这是为create调用的
但是在get调用期间,我希望在对象中填充时间戳记值

最佳答案

您可以使用@Formula代替@Column来注释creationTimestamp字段,但在公式中使用相同的creationTimestamp。见for example

09-30 10:26