2011-12-21 183 views
0

我使用spring和hibernate开发一个简单的在线拍卖系统。我创建了一个POJO“Items.java”包含了像数据变量:Spring,JPA和休眠问题

@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。为什么这样?

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

回答

1

我认为这是因为您在日期的@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

尝试删除它。

+0

嗨Thanx的答复。但我说的是cDate而不是sDate。 sDate没问题,当前时间戳会自动插入到mysql中,但是它的值是从jsp表单获得的sDate(例如卖方输入(名称,汇总,价格,描述,出价截止日期),所以这个截止日期/ cDate不是被插入)。我想在从表单获取数据的同时,日期值是字符串格式,并且没有被转换为DATETIME格式,但我如何在Spring Controller类中将其转换? – user1108823 2011-12-21 18:13:46

1

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