简体   繁体   中英

hibernate 4.3.6 save(entity) oracle

After update to hibernate 4.3.6 save(entity) doesn't work. Before update save look's like:

public void save(Object entity) {
     getHibernateTemplate().save(entity);
}

And it work's fine. Now it's:

public void save(Object entity) {
    getCurrentSession().save(entity);
}

And it doesn't save entity. Hibernate entities and maps are the same. Nothing was changed. The problem is when i'm trying to save entity, then i'm calling stored procedure using ibatis which need to get entity saved before in DB (Oracle). There is no data in DB so my procedure crash.

My question: What is wrong with hibernate-core 4.3.6 that this save doesn't work like in hibernate-core 3.5.6 (my previous version). No changes in code except save call. Only libraries.

When i execute save on debug mode:

2014-10-29 11:35:31,820 Thread-8 SessionFactoryImpl$SessionBuilderImpl- Opening Hibernate Session. tenant=null, owner=null
2014-10-29 11:35:31,823 Thread-8 SessionImpl- Setting flush mode to: MANUAL
2014-10-29 11:35:31,862 Thread-8 DefaultSaveOrUpdateEventListener- Saving transient instance
2014-10-29 11:35:31,865 Thread-8 AbstractSaveEventListener- Generated identifier: 10107, using strategy: org.hibernate.id.Assigned
2014-10-29 11:35:31,868 Thread-8 AbstractSaveEventListener- Saving pl.com.uhc.db.hibernates.dto.ster.Message#10107
2014-10-29 11:35:31,871 Thread-8 ActionQueue- Adding an EntityInsertAction for [pl.com.uhc.db.hibernates.dto.ster.Message] object
2014-10-29 11:35:31,874 Thread-8 ActionQueue- Adding insert with no non-nullable, transient entities: [EntityInsertActionpl.com.uhc.db.hibernates.dto.ster.Message#10107]
2014-10-29 11:35:31,877 Thread-8 ActionQueue- Adding resolved non-early insert action.
2014-10-29 11:35:31,880 Thread-8 IdentifierValue$4- ID unsaved-value strategy UNDEFINED
2014-10-29 11:35:31,883 Thread-8 AbstractEntityPersister- Getting current persistent state for: pl.com.uhc.db.hibernates.dto.ster.MessageType#1
Hibernate: 
select
   messagetyp_.MessageTypeID,
   messagetyp_.FullName as FullName2_115_,
   messagetyp_.ShortName as ShortName3_115_,
   messagetyp_.Type as Type4_115_ 
from
MessageType messagetyp_ 
where
messagetyp_.MessageTypeID=?
2014-10-29 11:35:31,891 Thread-8 LogicalConnectionImpl- Obtaining JDBC connection
2014-10-29 11:35:31,894 Thread-8 LogicalConnectionImpl- Obtained JDBC connection
2014-10-29 11:35:31,897 Thread-8 JdbcCoordinatorImpl- Registering statement [oracle.jdbc.driver.OraclePreparedStatementWrapper@133c3e0]
2014-10-29 11:35:31,900 Thread-8 BasicBinder- binding parameter [1] as [INTEGER] - [1]
2014-10-29 11:35:31,906 Thread-8 JdbcCoordinatorImpl- Registering result set [oracle.jdbc.driver.OracleResultSetImpl@180ca9e]
2014-10-29 11:35:31,909 Thread-8 BasicExtractor- extracted value ([FullName2_115_] : [VARCHAR]) - [Komunikat statystyczny zwrotny[SWZ]]
2014-10-29 11:35:31,912 Thread-8 BasicExtractor- extracted value ([ShortName3_115_] : [VARCHAR]) - [SWZ]
2014-10-29 11:35:31,914 Thread-8 BasicExtractor- extracted value ([Type4_115_] : [VARCHAR]) - [P_SWI]
2014-10-29 11:35:31,917 Thread-8 JdbcCoordinatorImpl- Releasing result set [oracle.jdbc.driver.OracleResultSetImpl@180ca9e]
2014-10-29 11:35:31,920 Thread-8 JdbcCoordinatorImpl- Closing result set [oracle.jdbc.driver.OracleResultSetImpl@180ca9e]
2014-10-29 11:35:31,924 Thread-8 JdbcCoordinatorImpl- Releasing statement [oracle.jdbc.driver.OraclePreparedStatementWrapper@133c3e0]
2014-10-29 11:35:31,928 Thread-8 JdbcCoordinatorImpl- Closing prepared statement [oracle.jdbc.driver.OraclePreparedStatementWrapper@133c3e0]
2014-10-29 11:35:31,931 Thread-8 JdbcCoordinatorImpl- Starting after statement execution processing [ON_CLOSE]
2014-10-29 11:35:31,934 Thread-8 UnresolvedEntityInsertActions- No unresolved entity inserts that depended on [pl.com.uhc.db.hibernates.dto.ster.Message#10107]
2014-10-29 11:35:31,937 Thread-8 UnresolvedEntityInsertActions- No entity insert actions have non-nullable, transient entity dependencies.

Add @Transactional to the method:

@Transactional
public void save(Object entity) {
    getCurrentSession().save(entity);
}

Hibernate need a transaction to create session. After add this annotation save starts to work.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM