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);
}
这个代码片段是否应该由itslf工作?它不会抛出异常.但它什么都没做.我对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经验.
编辑以显示我的课程:
我需要一个事务,但我不能从共享的EntityManager中获取它(这意味着什么?)
我是否只需要一个EntityManager?如果我这样做,我不能使用EntityManagerFactory作为静态.
对不起,我不是在创建这种架构.我刚开始使用Spring和Hibernate,所以这里有一个很大的组合……
ApplicationContext的:
persistence:
com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.IdCroisiereKaravelArmateur
com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereInfoCatalogueKaravel
com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereOffreItineraireCatalogueKaravel
com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.EscaleCatalogueKaravel
com.karavel.connectivity.gateway.croisiere.common.domain.cataloguekaravel.CroisiereItineraireCatalogueKaravel
实体:
@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();
}
}