Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 春天的玻璃鱼不会持久_Spring_Jpa 2.0_Eclipselink_Glassfish 3 - Fatal编程技术网

Spring 春天的玻璃鱼不会持久

Spring 春天的玻璃鱼不会持久,spring,jpa-2.0,eclipselink,glassfish-3,Spring,Jpa 2.0,Eclipselink,Glassfish 3,我使用Spring3.0.6、GlassFish3.1、EJB3、JPA2,我的提供者是EclipseLink(JPA2.0) 我的Web应用程序具有以下配置文件: persistence.xml: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org

我使用Spring3.0.6、GlassFish3.1、EJB3、JPA2,我的提供者是EclipseLink(JPA2.0)

我的Web应用程序具有以下配置文件:

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>tranEnterprise</jta-data-source>    
  <properties>
  <property name="eclipselink.target-server" value="SunAS9"/>
  <property name="eclipselink.logging.level" value="FINEST"/>
  <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
 <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="JavaApplication2PU" transaction-type="RESOURCE_LOCAL">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  <class>entity.Contract</class>
 </persistence-unit>
</persistence>

我还试图不使用EJB,而是让它由Spring管理

persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="ejbPU" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>tranEnterprise</jta-data-source>    
  <properties>
  <property name="eclipselink.target-server" value="SunAS9"/>
  <property name="eclipselink.logging.level" value="FINEST"/>
  <property name="eclipselink.target-database" value="org.eclipse.persistence.platform.database.MySQLPlatform"/>
</properties>
</persistence-unit>
</persistence>
<?xml version="1.0" encoding="UTF-8"?>
 <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence     http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
  <persistence-unit name="JavaApplication2PU" transaction-type="RESOURCE_LOCAL">
  <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
  <class>entity.Contract</class>
 </persistence-unit>
</persistence>


您需要打开一个事务(而不是只读)来保存某些内容:

例如:

@Controller
@RequestMapping...
public class  MyController {

    @Transactional  //<---------- That is what you need to add.
    @RequestMapping
    public ModelAndView updateSomething(SomethingData somethingData, int somethingId) {
       SomethingEntity entity = somethingDao.loadById(somethingId));
       entity.setX(somethingData.getX());
       ...
    }
}
@控制器
@请求映射。。。
公共类MyController{

@事务性//您需要打开一个事务(而不是只读)来保存某些内容:

例如:

@Controller
@RequestMapping...
public class  MyController {

    @Transactional  //<---------- That is what you need to add.
    @RequestMapping
    public ModelAndView updateSomething(SomethingData somethingData, int somethingId) {
       SomethingEntity entity = somethingDao.loadById(somethingId));
       entity.setX(somethingData.getX());
       ...
    }
}
@控制器
@请求映射。。。
公共类MyController{
@事务性//

我觉得这条线很狡猾

难道不是吗

<tx:annotation-driven/>

?

当您说“不在数据库中持久化数据”时,它会引发任何异常吗?


我觉得这条线很狡猾

难道不是吗

<tx:annotation-driven/>

?


当您说“不在数据库中持久化数据”时,它会引发任何异常吗?

这听起来像是类加载器问题,很可能是由于您的Spring配置,但我不确定您的配置中有什么错误。您知道如何由两个不同的类加载器加载该类

您可以在没有弹簧的情况下对其进行测试以确认这一点


是否要重新部署到live server?尝试重新启动服务器,您可能部署了旧的持久化单元。请确保在取消部署时关闭EntityManagerFactory。

这听起来像是类加载器问题,很可能是由于Spring配置,但我不确定配置中有什么错误。您知道类loa是如何配置的吗由两个不同的装载机进行装载

您可以在没有弹簧的情况下对其进行测试以确认这一点



您是否要重新部署到实时服务器?请尝试重新启动服务器,您可能部署了旧的持久化单元。请确保在取消部署时关闭EntityManagerFactory。

我已添加了该行,但问题仍然存在。@Canis Majoris:请参阅我的扩展答案,似乎未启用事务注释支持Hanks Ralph,我是“我添加了行,但没有任何更改。仍然是相同的问题我添加了行,但问题仍然存在。@Canis Majoris:请看我的扩展答案,似乎没有启用事务注释支持Hanks Ralph,我添加了行,但没有任何更改。仍然是相同的问题我也尝试了该行,但没有发生任何问题。没有。”不会引发任何异常。这与您的MYSQL服务器的配置有关吗?我会尝试其他数据库服务器,例如Derby。此外,我建议您直接使用数据源bean,而不是通过JNDI进行查找,这样您就可以对其进行Junit测试。您是直接将EntityManager注入到您的控制器中还是有服务EntityManager被注入的e bean?请尝试注释您的createContract()方法处理事务并从你的控制器中删除事务谢谢你,我也试过了,什么都没有发生。这对我来说似乎是一个无法解决的问题!我也试过这一行,但什么都没有发生。不,它不会引发任何异常。这与你的MYSQL服务器的配置有关吗?我会尝试另一个数据库服务器,例如Derby。我还建议您直接使用数据源bean,而不是通过JNDI查找它,这样您就可以对其进行Junit测试。您是直接将EntityManager注入控制器还是将EntityManager注入服务bean?请尝试注释您的createContract()方法使用事务性并从控制器中删除事务性谢谢you Mingtao Sun,我也试过了,什么都没发生。这对我来说似乎是一个无法解决的问题!当我不使用Spring而使用JEE框架时,一切都很顺利。我的问题就是Spring。顺便说一句,我使用EntityManager而不是EntityManager Factory。当我不要使用Spring,而是使用JEE框架,一切都很顺利。我的问题只是Spring。顺便说一句,我使用EntityManager而不是EntityManager Factory。嗨,卡尼斯,我也有同样的问题,你可以解决这个问题吗?你能分享你的解决方案吗?谢谢!我正在使用Glassfish 4和Spring 3。我不明白为什么不保存..是吗不显示任何错误,但仅使用spring无法保存。嗨,Canis,我有同样的问题,您可以解决此问题吗?您可以分享您的解决方案吗?谢谢!我正在使用Glassfish 4和spring 3。我无法理解为什么不保存。不显示任何错误,但仅使用spring无法保存。
java.lang.IllegalArgumentException: Object:  contractNumber= Freddy  is not a known entity type.
at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.registerNewObjectForPersist(UnitOfWorkImpl.java:4158)
at org.eclipse.persistence.internal.jpa.EntityManagerImpl.persist(EntityManagerImpl.java:440)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at  org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(Exte ndedEntityManagerCreator.java:365)
at $Proxy8.persist(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
at $Proxy8.persist(Unknown Source)
at dao.ContractDaoImpl.createUser(ContractDaoImpl.java:36)
at javaapplication2.JavaApplication2.main(JavaApplication2.java:28)
@Controller
@RequestMapping...
public class  MyController {

    @Transactional  //<---------- That is what you need to add.
    @RequestMapping
    public ModelAndView updateSomething(SomethingData somethingData, int somethingId) {
       SomethingEntity entity = somethingDao.loadById(somethingId));
       entity.setX(somethingData.getX());
       ...
    }
}
<tx:annotation-driven transaction-manager="transactionManager" />
<tx:jta-transaction-manager />
<tx:annotation-driven/>