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", joinColumns=@JoinColumn(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 :(得分:4)
我得到了同样的错误,事实证明我正在做
import java.sql.Date;
而不是
import java.util.Date;
希望这可能会有所帮助
答案 1 :(得分:0)
根据标记,您使用的是JPA 2.0。这不完全正确,因为3.4是JPA 1.0实现。只有3.5.x的Hibernate版本才是JPA 2.0 API的实现。
这会导致问题,因为在JPA 2.0中引入了使用@Temporal和ElementCollection的概念。此错误不会被忽略,因为早期版本中已存在@Temporal注释,但JPA 2.0中的使用范围已扩大以涵盖您的用例。仅在以后的规范中存在的其他注释会被忽略,这也可能会导致问题。
您可以做的是将Hibernate更新到更新的版本,例如3.6.10。如果您正在创建新软件,则不存在迁移问题,因此直接更新到4.x是有意义的。
答案 2 :(得分:0)
使用Date时,返回类型必须为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;
}
答案 3 :(得分:0)
我遇到了同样的问题,并且在运行该应用程序时得到关注。
Exception in thread "main" org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property: com.model.Student.currentDate
at org.hibernate.cfg.annotations.SimpleValueBinder.setType(SimpleValueBinder.java:189)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyAndValue(PropertyBinder.java:185)
at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:205)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2236)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:961)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:788)
at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:250)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:231)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:274)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:84)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:474)
at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:85)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:689)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724)
at com.main.HibernateMain.main(HibernateMain.java:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
发生这种情况是因为我将错误的Date导入语句导入了我的班级
import java.sql.Date;
删除import语句并使用以下
import java.util.Date;
然后它起作用。
如果有人想知道这两个进口商品之间的区别。检查以下内容。
有关更多信息,请查看以下内容:
https://javarevisited.blogspot.com/2012/04/difference-between-javautildate-and.html#ixzz5KnvEjas7
答案 4 :(得分:0)
实际上两件事你必须考虑。
使用EvalAtIndex()
确保您的字段返回类型也是java.util.Date
Date