2015-09-04 4 views
2

Я использую hibernate 4.3.7 с mysql. Я не могу сохранить joda tiem в mysql. Когда я использую эту аннотацию @type (тип = «org.jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone»), он бросает это исключениеСопоставление свойств имеет неправильное количество столбцов:

отображение свойства имеет неверное число столбцов: тип car.modifiedDate: орг .jadira.usertype.dateandtime.joda.PersistentDateTimeWithZone

Entity класс:

@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

Проблема может быть в столбце dateCreated и modifiedDate в вашей базе данных имеет тип DateTime, но ваш код сохраняется как DateTime с зоной. Вы можете попробовать редактирование dateCreated и modifiedDate типа к 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; 

И если вы хотите сохранить DateTime с зоны, то вы должны изменить ваш @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

Как это сделать ? Но время неверно в дБ. когда я сохраню дату, время должно быть 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

 Смежные вопросы

  • Нет связанных вопросов^_^