org.hibernate.AnnotationException:@Temporal只能在java.util.Date或java.util.Calendar属性上设置
问题描述:
hibernate-entitymanager-3.4.0.GA.jar hibernate-annotations-3.4.0.GA.jar hibernate-commons-annotations-3.3.0.ga.jar hibernate-core-3.3.1.GA.jar javax.persistence.jar am using above jars to run jpa program but am getting below exception. org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: asso_attrib_overrides.FulltimeEmployee.currentProjects. @Entity public class FulltimeEmployee extends Employee { @ElementCollection @CollectionTable(name="EMP_PROJECTS", [email protected](name="MY_EMP_ID")) @Temporal(TemporalType.DATE) @MapKeyJoinColumn(name="THE_PROJECT_ID") @Column(name="STARTDATE") protected Map<Project, Date> currentProjects; public Map<Project, Date> getCurrentProjects() { return currentProjects; } public void setCurrentProjects(Map<Project, Date> currentProjects) { this.currentProjects = currentProjects; }
答
根据标签,您使用的是JPA 2.0。这并不完全正确,因为3.4是JPA 1.0的实现。只有3.5.x以上的Hibernate版本是JPA 2.0 API的实现。
这会导致问题,因为在JPA 2.0中引入了在ElementCollection中使用@Temporal的概念。这个错误并未被忽略,因为@Temporal注释已经存在于早期版本中,但是在JPA 2.0中扩展了用法以涵盖您的用例。其他注释仅在以后的规范中存在,这些注释都会被忽略,这也可能会导致问题。
你可以做的是将Hibernate更新到更新的版本,例如更新到3.6.10。如果您正在创建新软件,则不存在迁移问题,因此直接更新到4.x是有意义的。
答
我得到了同样的错误,事实证明,我在做
import java.sql.Date;
代替
import java.util.Date;
希望的同时使用日期,这可能是有帮助的
答
,返回类型必须成为日期。即java.util(import java.util.Date;)
private Date date;
@Temporal(TemporalType.DATE)
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}