2012-07-11 44 views
0
 

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; 
    } 


回答

0

根据标签,您使用的是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是有意义的。

2

我得到了同样的错误,事实证明,我在做

import java.sql.Date; 

代替

import java.util.Date; 

希望的同时使用日期,这可能是有帮助的

0

,返回类型必须成为日期。即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; 
    }