2010-03-24 63 views
6

我正在使用Gilead來堅持我的實體在我的GWT項目中,即時消息也使用hibernate註釋。我的問題是在我的一對多association.this是我的用戶類,用於保存到FileLocations當我通過gwt使用註釋與gilead進行休眠時,我收到了一個oneToMany關聯的錯誤

@Entity 
@Table(name = "yf_user_table") 
public class YFUser implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "user_id",nullable = false) 
private int userId; 
@Column(name = "username") 
private String username; 
@Column(name = "password") 
private String password; 
@Column(name = "email") 
private String email; 

@OneToMany列表的引用(級聯= CascadeType.ALL,取= FetchType.LAZY) @JoinColumn(NAME = 「USER_ID」) private List fileLocations = new ArrayList();

這是我的文件位置類

@Entity 
@Table(name = "fileLocationTable") 
public class FileLocation implements Serializable { 

@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
@Column(name = "locationId", updatable = false, nullable = false) 
private int ieId; 
@Column (name = "location") 
private String location; 

@ManyToOne(取= FetchType.LAZY) @JoinColumn(name = 「USER_ID」,可爲空= FALSE) 私人YFUser uploadedUser;

當我將這些數據保存在普通桌面應用程序中時,它可以正常工作,創建表格,並且可以向其添加和存儲數據。但是當我嘗試堅持在我的gwt應用程序中的數據我得到的錯誤,我會讓他們更低。這是我的ServiceImpl類,它擴展了PersistentRemoteService。

public class TestServiceImpl extends PersistentRemoteService implements TestService { 

public static final String SESSION_USER = "UserWithinSession"; 

public TestServiceImpl(){ 

    HibernateUtil util = new HibernateUtil(); 
     util.setSessionFactory(com.example.server.HibernateUtil 
       .getSessionFactory()); 

    PersistentBeanManager pbm = new PersistentBeanManager(); 
    pbm.setPersistenceUtil(util); 
    pbm.setProxyStore(new StatelessProxyStore()); 

    setBeanManager(pbm); 
} 

    @Override 
public String registerUser(String username, String password, String email) { 
    Session session = com.example.server.HibernateUtil.getSessionFactory().getCurrentSession(); 
    session.beginTransaction(); 

    YFUser newUser = new YFUser(); 
    newUser.setUsername(username);newUser.setPassword(password);newUser.setEmail(email); 

    session.save(newUser); 
    session.getTransaction().commit(); 

    return "Thank you For registering "+ username; 

} 

這是我得到的錯誤。錯誤消失,當我刪除我的onetoManyRelationship,並建立我的會話工廠,當我把它,它在休眠的buildsessionfactory的行使用,它會引發此異常。我的hibernate util類也可以。這是錯誤java.lang.NoSuchMethodError:javax.persistence.OneToMany.orphanRemoval()z

Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.Version <clinit> 
INFO: Hibernate Annotations 3.5.0-Beta-4 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: Hibernate 3.5.0-Beta-4 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: hibernate.properties not found 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment buildBytecodeProvider 
INFO: Bytecode provider name : javassist 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Environment <clinit> 
INFO: using JDK 1.4 java.sql.Timestamp handling 
Mar 24, 2010 10:03:22 PM org.hibernate.annotations.common.Version <clinit> 
INFO: Hibernate Commons Annotations 3.2.0-SNAPSHOT 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration configure 
INFO: configuring from resource: /hibernate.cfg.xml 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration getConfigurationInputStream 
INFO: Configuration resource: /hibernate.cfg.xml 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.Configuration doConfigure 
INFO: Configured SessionFactory: null 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.search.HibernateSearchEventListenerRegister    enableHibernateSearch 
INFO: Unable to find org.hibernate.search.event.FullTextIndexEventListener on the  classpath. Hibernate Search is not enabled. 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.AnnotationBinder bindClass 
INFO: Binding entity from annotated class: com.example.client.Entity1 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.EntityBinder bindTable 
INFO: Bind entity com.example.client.Entity1 on table entityTable1 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.AnnotationBinder bindClass 
INFO: Binding entity from annotated class: com.example.client.YFUser 
Mar 24, 2010 10:03:22 PM org.hibernate.cfg.annotations.EntityBinder bindTable 
INFO: Bind entity com.example.client.YFUser on table yf_user_table 
Initial SessionFactory creation failed.java.lang.NoSuchMethodError:  javax.persistence.OneToMany.orphanRemoval()Z 
[WARN] Nested in javax.servlet.ServletException: init: 
java.lang.ExceptionInInitializerError 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:38) 
at com.example.server.TestServiceImpl.<init>(TestServiceImpl.java:29) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
Caused by: java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1642) 
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:772) 
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:629) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:350) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1373) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:973) 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:33) 
... 26 more 
[WARN] Nested in java.lang.ExceptionInInitializerError: 
java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z 
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1642) 
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:772) 
at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:629) 
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:350) 
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1373) 
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:973) 
at com.example.server.HibernateUtil.<clinit>(HibernateUtil.java:33) 
at com.example.server.TestServiceImpl.<init>(TestServiceImpl.java:29) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
at java.lang.Class.newInstance0(Class.java:355) 
at java.lang.Class.newInstance(Class.java:308) 
at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153) 
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:463) 
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:362) 
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) 
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) 
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
at org.mortbay.jetty.Server.handle(Server.java:324) 
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) 
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) 
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) 
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) 
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) 
+0

與GWT自帶可皮塔配置嵌入式碼頭(見http://stackoverflow.com/questions/2364129/how-to-使用-JSTL-IN-A-GWT項目/ 2365106#2365106)。我會切換到外部Java服務器(可能是您在生產中使用的服務器)並查看錯誤/異常是否存在。欲瞭解更多信息請參閱http://code.google.com/webtoolkit/doc/latest/FAQ_DebuggingAndCompiling.html#How_do_I_use_my_own_server_in_hosted_mode_instead_of_GWT%27s –

+0

,所以我切換到tomcat部署,但現在我得到我的應用程序需要重新編譯的問題,我所做的只是把我的gwt projwct的戰爭文件,並將它放在網絡應用程序目錄中,爲什麼? – molleman

+0

是的,請仔細閱讀我上面鏈接的文檔 - 請參閱步驟#4。您需要將war *文件夾的內容放在webapps目錄中,而不是war *文件*(注意:您只需要執行一次)。 –

回答

13

ejb3-persistance.jar刪除並從構建路徑移除解決了我的問題,它也可能適用於你。

另外不要忘記添加hibernate-jpa-2.0-api-1.0.0.Final.jar到您的構建路徑。

+0

是我整理出來的。 – molleman

+0

還有另一種無縫升級的體驗。謝謝你的提示! –

4

使用javax.persistence API 2.0,但不是1.0一個

+0

可以從以下地址從sun repos下載:http://download.java.net/maven/2/org/eclipse/persistence/javax.persistence/2.0.0/,然後安裝:mvn install:install-file -DgroupId = javax.persistence -DartifactId = persistence-api -Dversion = 2.0.0 -Dpackaging = jar -Dfile = path/to/the/downloaded/file.jar – joostschouten

2

只需添加評論以幫助其他人面對此問題。也可能是您的應用程序服務器提供了一個「遮蔽」休眠版本的JPA版本。對我來說,我不得不做這樣的事情:

 
mkdir /usr/local/resin/libremoved 
mv /usr/local/resin/lib/jpa* /usr/local/resin/libremoved/ 

0

此外,如果你正在使用一個「完整」的Java EE API庫編譯(例如,一個同時包含JPA和其他API如Servlet等),然後確保完整的圖書館進一步下跌的類路徑不是具體JPA 2.0庫