2015-09-04 79 views
2

我使用hibernate 4.3.7和mysql。我无法在mysql中坚持joda tiem。当我使用此批注 @Type(TYPE = “org.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone”),它抛出该异常属性映射列数错误:

属性映射有错误的列数:car.modifiedDate类型:组织.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone

实体类:

@Entity 
public class Car implements Serializable { 
private static final long serialVersionUID = 1L; 

/** 
*/ 

@Column(name = "CAR_ID", nullable = false,length = 50) 
@Basic(fetch = FetchType.EAGER) 
@Id 
@XmlElement 
String carId; 
/** 
*/ 

@Column(name = "CAR_NAME", length = 50) 
@Basic(fetch = FetchType.EAGER) 
@XmlElement 
String carName; 

/** 
*/ 

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone") 
@Column(name = "DATE_CREATED") 
@Basic(fetch = FetchType.EAGER) 
@XmlElement 
DateTime dateCreated; 


@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone") 
@Column(name = "DATE_MODIFIED") 
@Basic(fetch = FetchType.EAGER) 
@XmlElement 
DateTime modifiedDate; 
/** 
*/ 


@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
@JoinColumn(name="MCR_CAR_ID", nullable=false, insertable=false, updatable=false) 
java.util.Set<MainCar> mainCar; 

//setters and getters 
} 

的pom.xml

<dependency> 
     <groupId>org.jadira.usertype</groupId> 
     <artifactId>usertype.core</artifactId> 
     <version>3.0.0.CR1</version> 
</dependency> 

回答

1

问题可能是dateCreatedmodifiedDate列中的数据库类型是DateTime,但是您的代码正在使用区域保存为DateTime。你可以尝试编辑dateCreatedmodifiedDate类型org.jadira.usertype.dateandtime.joda.PersistentDateTime如下:

@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
@Column(name = "DATE_CREATED") 
@Basic(fetch = FetchType.EAGER) 
@XmlElement 
DateTime dateCreated; 


@Type(type = "org.jadira.usertype.dateandtime.joda.PersistentDateTime") 
@Column(name = "DATE_MODIFIED") 
@Basic(fetch = FetchType.EAGER) 
@XmlElement 
DateTime modifiedDate; 

如果你想保存日期时间与区域,那么你就必须修改@Type为:

@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime", 
      parameters = { @Parameter(name = "databaseZone", value = "UTC"), 
       @Parameter(name = "javaZone", value = "jvm")}) 
     @Column(name = "DATE_MODIFIED") 
     @Basic(fetch = FetchType.EAGER) 
     @XmlElement 
     DateTime modifiedDate; 
+0

这怎么办? 但是时间在dB中是不正确的。当我坚持这个日期时,应该是2015-09-04 10:39:30。当我看着DBM它节省2015-09-04 06:39:30。怎么了? – asma

+0

要接受答案,在投票部分下面有一个勾号标记,你必须点击它并保存默认时区“UTC”,修改'parameters = {@Parameter(name =“databaseZone”,value =“UTC”) , @Parameter(name =“javaZone”,value =“jvm”)})'以适合您的时区! – Arpit

+0

我没有足够的声望来投票你的答案。 我试了一下,还是一样的。 – asma