【问题标题】:Issue with Spring, JPA, and hibernateSpring、JPA 和休眠的问题
【发布时间】:2011-12-21 07:51:51
【问题描述】:

我正在使用 spring 和 hibernate 开发一个简单的在线拍卖系统。我创建了一个 POJO“Items.java”,其中包含如下数据变量:

@Id
@GeneratedValue
@Column(name="item_id")
private Integer itemId;

@Column
private String name;

@Column
private String summary;

@Column
private double price;

@Column
private String description;

@Column(name="sDate", insertable=false, updatable=false, columnDefinition="timestamp default current_timestamp")
@Generated(value=GenerationTime.INSERT)
@Temporal(TemporalType.TIMESTAMP)
private  Date sDate;

@Temporal(TemporalType.TIMESTAMP)
private Date cDate;

sDatecDate 分别是开始日期和结束日期。 sDate 是自动插入的当前日期,cDate 是卖方通过表格输入的截止日期。所以,我试图通过使用 JSP 表单从卖家那里获取输入,将(名称、摘要、价格、描述和截止日期)插入 mysql。除日期外,所有数据均已插入。数据库中的日期值为 NULL。为什么会这样?

任何帮助将不胜感激。我为这个问题搜索了很多,但找不到解决方案。

【问题讨论】:

    标签: java hibernate spring jpa-2.0


    【解决方案1】:

    设置insertable=false 时,您必须通过数据库机制(如Oracle 中的触发器或默认值)以某种方式为该列提供值。应用程序代码不会为您生成时间戳。

    【讨论】:

      【解决方案2】:

      我认为这是因为您在日期的@Column 注释中有“Insertable = false”。

      boolean insertable
      (Optional) Whether the column is included in SQL INSERT statements generated by the persistence provider.
      Default value:
      true
      Since:
      JPA 1.0
      

      参考:http://www.objectdb.com/api/java/jpa/Column

      尝试删除它。

      【讨论】:

      • 您好,感谢您的回复。但我说的是 cDate 而不是 sDate。 sDate很好,当前时间戳会自动插入mysql,但是sDate的值是从jsp表单中获取的(例如卖方输入(名称,摘要,价格,描述,投标截止日期),所以这个截止日期/cDate不是被插入)。我认为在从表单中获取数据时,日期值是字符串格式并且没有转换为 DATETIME 格式,但是我如何在 Spring Controller 类中转换它??
      猜你喜欢
      • 2021-02-25
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-30
      • 2020-11-13
      • 1970-01-01
      • 1970-01-01
      • 2014-08-08
      相关资源
      最近更新 更多