- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
public void miseAJourTranscoIdCroisiere(Integer idCroisiereKaravel, String idCroisiereArmateur, TypeArmateur typeArmateur) {
IdCroisiereKaravelArmateur idRelationship = new IdCroisiereKaravelArmateur();
idRelationship.setIdCroisiereKaravel(idCroisiereKaravel);
idRelationship.setIdCroisiereArmateur(idCroisiereArmateur);
idRelationship.setTypeArmateur(typeArmateur);
entityManager.persist(idRelationship);
}
这个代码片段应该由它自己工作吗?它也不异常(exception)。但是它什么都不做。我对 Java 中的持久性非常困惑。
因为我不能用 hql 插入 ... 值,所以我应该直接用 jpa 来做,对吧?
我试过了in this way但我明白了
java.lang.IllegalStateException: Not allowed to create transaction on shared EntityManager - use Spring transactions or EJB CMT instead
at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:198)
at $Proxy19.getTransaction(Unknown Source)
at com.karavel.connectivity.gateway.croisiere.common.repository.impl.CatalogueKaravelRepositoryImpl.miseAJourTranscoIdCroisiere(CatalogueKaravelRepositoryImpl.java:56)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy23.miseAJourTranscoIdCroisiere(Unknown Source)
at com.karavel.connectivity.gateway.croisiere.controller.service.RechercherCroisiereController.getItineraireCroisiere(RechercherCroisiereController.java:385)
at com.karavel.connectivity.gateway.croisiere.controller.service.RechercherCroisiereController.obtenirListeCroisiere(RechercherCroisiereController.java:283)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.AbstractRequestLoggingFilter.doFilterInternal(AbstractRequestLoggingFilter.java:193)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
所以我考虑创建另一个 EntityManager 来执行此操作。但因为它不是静态方法,所以我不能使用 EntityManagerFactory。
在 ddbb 中做一个简单的插入会如此困惑吗?
如果我说的很愚蠢或者我混淆了概念,我很抱歉,但我在 Java 持久性和 Hibernate 方面有两天的经验。
编辑以显示我的类(class):
我确实需要一个事务,但我不能从一个共享的 EntityManager 中得到它(这是什么意思?)
我是否只需要一个 EntityManager 用于该方法?如果这样做,我就不能将 EntityManagerFactory 用作静态。
抱歉,这个架构不是我创建的。我刚刚开始使用 Spring 和 Hibernate,所以这里有一个很大的组合......
应用上下文:
<bean id="gateway.croisiere.catalogueKaravel.dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${gateway.croisiere.catalogueKaravel.driver.className}" />
<property name="url" value="${gateway.croisiere.catalogueKaravel.driver.url}" />
<property name="username" value="${gateway.croisiere.catalogueKaravel.driver.username}" />
<property name="password" value="${gateway.croisiere.catalogueKaravel.driver.password}" />
</bean>
<bean id="gateway.croisiere.catalogueKaravel.entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="persistenceXmlLocation" value="classpath:/catalogueKaravel-persistence.xml" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="${gateway.croisiere.catalogueKaravel.hibernate.hbm2ddl.auto}" />
<property name="databasePlatform" value="${gateway.croisiere.catalogueKaravel.hibernate.dialect}" />
<property name="showSql" value="${gateway.croisiere.catalogueKaravel.hibernate.show_sql}" />
</bean>
</property>
<property name="dataSource" ref="gateway.croisiere.catalogueKaravel.dataSource" />
<property name="persistenceUnitName" value="gateway-croisiere-catalogueKaravel-persitence-unit" />
</bean>
<bean id="gateway.croisiere.catalogueKaravel.transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="gateway.croisiere.catalogueKaravel.entityManagerFactory" />
<property name="defaultTimeout" value="${gateway.croisiere.catalogueKaravel.hibernate.transaction.timeout}" />
</bean>
<tx:annotation-driven transaction-manager="gateway.croisiere.catalogueKaravel.transactionManager" />persistence:
<persistence 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" version="1.0">
<persistence-unit name="gateway-croisiere-catalogueKaravel-persitence-unit" transaction-type="RESOURCE_LOCAL">
<class>com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.IdCroisiereKaravelArmateur</class>
<class>com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereInfoCatalogueKaravel</class>
<class>com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereOffreItineraireCatalogueKaravel</class>
<class>com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.EscaleCatalogueKaravel</class>
<class>com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereItineraireCatalogueKaravel</class>
</persistence-unit>
</persistence>
实体:
@Entity
@Table(name="transco_idcroisierekaravel_idcroisierearmateur")
public class IdCroisiereKaravelArmateur implements Serializable {
private static final long serialVersionUID = -2764921376397148157L;
@Id
@GeneratedValue
@Column(name="id")
private Integer id;
@Column(name="idCroisiereKaravel")
private Integer idCroisiereKaravel;
@Column(name="idCroisiereArmateur")
private String idCroisiereArmateur;
@Column(name="typeArmateur")
@Enumerated(EnumType.STRING)
private TypeArmateur typeArmateur;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getIdCroisiereKaravel() {
return idCroisiereKaravel;
}
public void setIdCroisiereKaravel(Integer idCroisiereKaravel) {
this.idCroisiereKaravel = idCroisiereKaravel;
}
public String getIdCroisiereArmateur() {
return idCroisiereArmateur;
}
public void setIdCroisiereArmateur(String idCroisiereArmateur) {
this.idCroisiereArmateur = idCroisiereArmateur;
}
public TypeArmateur getTypeArmateur() {
return typeArmateur;
}
public void setTypeArmateur(TypeArmateur typeArmateur) {
this.typeArmateur = typeArmateur;
}
}
存储库
@SuppressWarnings("unchecked")
public class CatalogueKaravelRepositoryImpl implements CatalogueKaravelRepository {
@PersistenceContext(unitName="gateway-croisiere-catalogueKaravel-persitence-unit")
private EntityManager entityManager;
@Override
@Transactional
public void miseAJourTranscoIdCroisiere(Integer idCroisiereKaravel, String idCroisiereArmateur, TypeArmateur typeArmateur) {
IdCroisiereKaravelArmateur idRelationship = new IdCroisiereKaravelArmateur();
idRelationship.setIdCroisiereKaravel(idCroisiereKaravel);
idRelationship.setIdCroisiereArmateur(idCroisiereArmateur);
idRelationship.setTypeArmateur(typeArmateur);
EntityManager em = getEntityManager();
// begin transaction
em.getTransaction().begin();
// persist object - add to entity manager
em.persist(idRelationship);
// flush em - save to DB
em.flush();
// commit transaction at all
em.getTransaction().commit();
}
}
最佳答案
看起来您的问题很简单:它需要一个交易。你正在使用 Spring 。将 Spring 拖入持久化领域的主要原因是为了获得基于 AOP 的注入(inject)事务.. ?您应该能够注释您的方法 @Transaction 并在您的 applicationContext.xml 中或通过其他 Bootstrap 启动 TransactionManager。
关于java - 使用 entityManager.persist(Object) 插入 ... 值;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10755717/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!