iva*_*var 28 java spring hibernate jpa
我的entityManager persist()从序列获取id并将其放到我的Image对象中,但Image对象本身没有显示在数据库中.EntityManager.flush()给出了一个错误,所以我不能这样提交.这是我的代码.
@Repository
public class ImageDaoImpl extends BaseDao implements ImageDao {
@PersistenceContext
protected EntityManager entityManager;
@Override
@Transactional
public void create(Image image) {
JpaTemplate jpaTemplate = getJpaTemplate(entityManager);
jpaTemplate.persist(image);
}
Run Code Online (Sandbox Code Playgroud)
@Repository
public class BaseDao {
private JpaTemplate jpaTemplate;
public JpaTemplate getJpaTemplate(EntityManager entityManager){
if(jpaTemplate == null)
jpaTemplate = new JpaTemplate(entityManager);
return jpaTemplate;
}
Run Code Online (Sandbox Code Playgroud)
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
p:dataSource-ref="dataSource">
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true" />
<property name="generateDdl" value="true" />
<property name="databasePlatform" value="org.hibernate.dialect.PostgreSQLDialect" />
</bean>
</property>
<property name="persistenceUnitName" value="sample"></property>
</bean>
<!-- DataSource Setup -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/imageCapture" />
<property name="username" value="myusername" />
<property name="password" value="mypassword" />
</bean>
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)
Pre*_*raj 28
这通常发生在未应用交易时..我怀疑@Transactional拦截器没有正确拦截.
Koz*_*łek 27
persist()表示"将对象添加到托管条目列表".要将对象保存到数据库,必须调用flush()方法.但请记住,您必须在交易中打电话.
//编辑:示例保存方法.
public void save(T t){
// begin transaction
em.getTransaction().begin();
if (!em.contains(t)) {
// persist object - add to entity manager
em.persist(t);
// flush em - save to DB
em.flush();
}
// commit transaction at all
em.getTransaction().commit();
}
Run Code Online (Sandbox Code Playgroud)
这不是你能做的最好的,但足够好.
| 归档时间: |
|
| 查看次数: |
77169 次 |
| 最近记录: |