Java 如何使用entitymaneger.merge(T实体)SpringMVC、jpa Hibernate
我不明白它是如何工作的请帮助! 当我使用Crudepository时,一切都很好:Java 如何使用entitymaneger.merge(T实体)SpringMVC、jpa Hibernate,java,spring,hibernate,spring-data-jpa,Java,Spring,Hibernate,Spring Data Jpa,我不明白它是如何工作的请帮助! 当我使用Crudepository时,一切都很好: @Transactional public Contact save(Contact contact) { contactRepository.save(contact); } <tx:annotation-driven transaction-manager="transactionManager"/> <bean id="e
@Transactional
public Contact save(Contact contact) {
contactRepository.save(contact);
}
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="appPu"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="packagesToScan" value="com.myProject.myMvcProject"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.H2Dialect
</prop>
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven/>
<context:annotation-config/>
<context:component-scan base-package="com.myProject.myMvcProject"/>
<jpa:repositories base-package="com.myProject.myMvcProject"
entity-manager-factory-ref="emf"
transaction-manager-ref="transactionManager"/>
</beans>
但当我使用自己的方法时:
@Transactional
public Contact save(Contact contact) {
if (contact.getid() == null) {
em.persist(contact);
return contact;
} else {
return em.merge(contact);
}
}
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="appPu"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="packagesToScan" value="com.myProject.myMvcProject"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.H2Dialect
</prop>
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven/>
<context:annotation-config/>
<context:component-scan base-package="com.myProject.myMvcProject"/>
<jpa:repositories base-package="com.myProject.myMvcProject"
entity-manager-factory-ref="emf"
transaction-manager-ref="transactionManager"/>
</beans>
合并不起作用。。。毫无例外。。。
所有其他CRUD操作都运行良好。。
my root-context.xml:
<tx:annotation-driven transaction-manager="transactionManager"/>
<bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="persistenceUnitName" value="appPu"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
</property>
<property name="packagesToScan" value="com.myProject.myMvcProject"/>
<property name="jpaProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.H2Dialect
</prop>
<prop key="hibernate.max_fetch_depth">3</prop>
<prop key="hibernate.jdbc.fetch_size">50</prop>
<prop key="hibernate.jdbc.batch_size">10</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<tx:annotation-driven/>
<context:annotation-config/>
<context:component-scan base-package="com.myProject.myMvcProject"/>
<jpa:repositories base-package="com.myProject.myMvcProject"
entity-manager-factory-ref="emf"
transaction-manager-ref="transactionManager"/>
</beans>
org.hibernate.dial.h2方言
3.
50
10
真的
仅添加@Transactional
是行不通的。您还需要告诉容器您想要使用注释驱动的注释。当使用java config add@EnableTransactionManagement
进行xml add
时,第二个方法中的em是什么?@M.Deinum没有它,第一个方法也不会工作不?Spring数据JPA存储库也会做一些其他事情,所以不一定。@M.Deinum在我的根上下文中。xml。。但我认为你已经接近真相了,这肯定是交易中的一个错误。。