我正在尝试在IntelliJ Idea 15中实现一个GWT项目。我对GWT及其superdev模式没有任何问题(至少是显而易见的) - 我可以运行一个应用程序并使用它。我可以做RPC调用。
但是,现在我正在尝试添加JPA / Hibernate支持来使用数据库。在这里,我遇到了麻烦。在项目中,我有一个GWT方面(2.6.1),一个JPA方面(使用hibernate实现)和一个web方面(用于web dd)。使用Open Module Settings -> Libraries -> New Project Library
我添加了gwt-servlet.jar
,并使用maven(它不是maven项目,仅使用Idea的功能)库:c3p0:c3p0:0.9.1.2
,org.hibernate:hibernate-entitymanager:5.0.3.Final
,{{1} };这就是配置。
使用此持久性单元属性(摘录):
org.postgresql:postgresql:9.3-1101-jdbc41
在GWT RPC servlet中,我尝试创建EntityManager实例:
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver"/>
<property name="hibernate.c3p0.min_size" value="5" />
<property name="hibernate.c3p0.max_size" value="20" />
<property name="hibernate.c3p0.timeout" value="300" />
<property name="hibernate.c3p0.max_statements" value="50" />
<property name="hibernate.c3p0.idle_test_period" value="3000" />
但是当我尝试使用默认的GWT运行配置(Jetty)在IDEA中运行它时,我得到以下异常:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("ThreatPersistenceUnit");
EntityManager em = emf.createEntityManager();
Query query = em.createQuery("SELECT a FROM Asset a");
...
由引起的
javax.persistence.PersistenceException: Unable to build entity manager factory
此外,在异常之前我收到以下警告: 警告:遇到HHH000022:c3p0属性,但在类路径中找不到c3p0提供程序类;这些属性将被忽略。
所以看起来服务器看不到c3p0和postgre jdbc驱动程序。
我试图谷歌,我找到的最接近的问题/解决方案是SO answer。我把库都放到了项目和工件上。但是,我不确定Jetty lib的回复意味着什么。如果我只使用GWT的默认服务器,我会在哪里找到Jetty安装?
另外,对我来说似乎很奇怪的是,在我遇到类似的问题(我不记得它是否正是ClassNotFoundException)之前,我可以通过向库中添加gwt-servlet.jar来解决GWT RPC问题。 - 为什么然后添加这些其他库没有帮助?至少看起来hibernate没有任何问题,因为它提供了警告等等。
答案 0 :(得分:1)
好吧,即使这是一个愚蠢的错误,也许将来有一天其他人会成功,所以为了将来的参考,这就是问题:
我已将SDK和源代码版本设置为1.6; hibernate和其他库似乎是在相同或更低版本中编译的。但是,postgre驱动程序是使用较新版本编译的 - 当我将源版本设置为1.7并将Java 8 SDK设置为SDK时,程序在某些不同的异常处崩溃(但这是由于我的编程错误 - 无关) 。只有在我尝试(完全绝望)在代码中手动创建驱动程序的新对象(不将创建委托给持久性提供程序)之后才发现这一点 - 然后我得到了主要的次要版本异常,我知道什么是问题