Mapping Set utilizzando @ElementCollection

Ho il seguente enum:

package ir.raysis.tcs.rule.days; public enum Days { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY; } 

Ho provato a mapparlo come un Set giorni come segue:

 @ElementCollection(targetClass = Days.class) @JoinTable(name = "days",joinColumns = @JoinColumn(name = "rule_id")) @Column(name ="daysOfWeek", nullable = false) @Enumerated(EnumType.STRING) private Set days = new HashSet(); 

Tuttavia, genera la seguente eccezione:

 Initial SessionFactory creation failed.org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: rule, for columns: [org.hibernate.mapping.Column(days)] Apr 14, 2013 4:15:17 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [jsp] in context with path [/ptcs] threw exception [javax.servlet.ServletException: java.lang.ExceptionInInitializerError] with root cause org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: rule, for columns: [org.hibernate.mapping.Column(days)] at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:306) at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:290) at org.hibernate.mapping.Property.isValid(Property.java:217) at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:464) at org.hibernate.mapping.RootClass.validate(RootClass.java:235) at org.hibernate.cfg.Configuration.validate(Configuration.java:1362) at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1865) at ir.raysis.tcs.db.HibernateUtil.(HibernateUtil.java:18) at ir.raysis.tcs.db.SaveUpadteDelete.save(SaveUpadteDelete.java:33) at ir.raysis.tcs.db.dBAllFunc.save(dBAllFunc.java:35) at ir.raysis.tcs.db.AbsDBObject.save(AbsDBObject.java:45) at ir.raysis.tcs.action.CreateMemberAction.execute(CreateMemberAction.java:31) at org.apache.jsp.action.createMember_jsp._jspService(createMember_jsp.java:79) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) at javax.servlet.http.HttpServlet.service(HttpServlet.java:722) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 

Come faccio a mapparlo correttamente?

per i futuri googler! finalmente sono riuscito a risolvere il problema, ho solo dovuto mettere le annotazioni da qualche altra parte nel mio codice,

 @ElementCollection(targetClass = Days.class) @CollectionTable(name = "days", joinColumns = @JoinColumn(name = "rule_id")) @Column(name = "daysOfWeek", nullable = false) @Enumerated(EnumType.STRING) public Set getDays() { return days; } 

come potete vedere ho scritto il codice di annotazione sopra e prima del metodo getter (invece di metterlo prima del codice di dichiarazione dell’attributo) e il problema risolto, chiunque possa spiegarmi quale causa questo sarà apprezzato. grazie

Prova a utilizzare @CollectionTable e non @JoinTable