/ / JDBC क्वेरी सत्र नहीं देखती है। एक ही लेन-देन पर अलग-अलग संशोधन - जावा, हाइबरनेट, स्प्रिंग-ऑरम

जेडीबीसी क्वेरी को उसी लेनदेन पर session.flush संशोधनों को नहीं देखा जाता है - जावा, हाइबरनेट, वसंत-ओआरएम

मेरे पास स्प्रिंग और हाइबरनेट के साथ एक परियोजना है।

हाइबरनेट के साथ किए गए इंसर्ट के बाद, मैं डेटा को jdbc sql में भी नहीं देख पा रहा हूं यहां तक ​​कि आपने "session.flush विधि" भी कहा है। कोई भी विचार क्यों ऐसा हो रहा है?

मेरा विन्यास इस तरह है:

 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="packagesToScan">
<list>
<value>ro.asf.capone.common.model</value>
</list>
</property>
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">${agency.hibernate.dialect}</prop>
<prop key="hibernate.show_sql">${agency.hibernate.show_sql}</prop>
<prop key="hibernate.format_sql">${agency.hibernate.format_sql}</prop>
<prop key="hibernate.jdbc.batch_size">100</prop>
<prop key="hibernate.jdbc.batch_versioned_data">true</prop>
<prop key="hibernate.jdbc.use_streams_for_binary">true</prop>
<prop key="hibernate.order_updates">true</prop>
<prop key="hibernate.connection.release_mode">auto</prop>
<prop key="hibernate.connection.autocommit">true</prop>
<prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory</prop>
<prop key="hibernate.cache.use_second_level_cache">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.use_structured_entries">true</prop>
<prop key="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</prop>
<prop key="hibernate.generate_statistics">false</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop>
<prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory</prop>
</props>
</property>
<property name="entityInterceptor" ref="auditInterceptor" />
</bean>

मैंने भी कोशिश की है <prop key="hibernate.connection.autocommit">false</prop> एक ही परिणाम के साथ।

डेटासोर्स हिर्की डीएस है, लेकिन मैंने उसी परिणाम के साथ bonecp की कोशिश की है।

@Bean
public DataSource dataSource() {
final HikariDataSource dataSource = new HikariDataSource();
//     dataSource.setAutoCommit(false);
dataSource.setDriverClassName(jdbcDriver);
dataSource.setJdbcUrl(jdbcUrl);
dataSource.setUsername(jdbcUsername);
dataSource.setPassword(jdbcPassword);
dataSource.setIdleTimeout(60000);
dataSource.setMinimumIdle(0);
dataSource.setMaximumPoolSize(2);
return dataSource;
}

जो कोड मैं उपयोग कर रहा हूं वह है:

 final AuditUsers typ = new AuditUsers();
typ.setEntityId(1l);
typ.setLevel(29);
final Serializable typid = getSession().save(typ);
System.out.println(">>>>>>>>>>>>>> id: " + typid);
getSession().flush();
getSession().clear();
final String sqltyp = "select * from AUDIT_USERS where id = " + typid;

try(Connection con = getConnection(); Statement stm = con.createStatement()){
System.out.println("!!!" + con.getAutoCommit());
final ResultSet rs = stm.executeQuery(sqltyp);
while(rs.next()){
System.out.println("RS filename: " + rs.getString("ENTITY_ID"));
}
}catch (final Exception e) {
e.printStackTrace();
}

और मुझे rs का अगला मूल्य नहीं मिला।

अगर मैं doWork विधि का उपयोग करता हूं तो परिणाम सेट में मान हैं लेकिन मैं इसे इस तरह उपयोग नहीं करना चाहता।

                getSession().doWork(new Work() {

@Override
public void execute(final Connection connection) throws SQLException {
final Statement stm = connection.createStatement();
final ResultSet rs = stm.executeQuery(sqltyp);
while(rs.next()){
System.out.println("RS filename: " + rs.getString("ENTITY_ID"));
}
}
});

मेरे पास एक्सेसिंग सोर्स और सेशनफैक्टिंग सेट करने के लिए एक हाइबरनेटडॉस्पोर्ट क्लास है जो स्प्रिंग कॉन्फ़िगरेशन xml से सेट किया गया है:

public abstract class HibernateDAOSupport {

private SessionFactory sessionFactory;

private DataSource dataSource;


public SessionFactory getSessionFactory() {
return sessionFactory;
}

public void setSessionFactory(final SessionFactory sessionFactory)    {
this.sessionFactory = sessionFactory;
}

public DataSource getDataSource() {
return dataSource;
}

public void setDataSource(final DataSource dataSource) {
this.dataSource = dataSource;
}

public void setDs(final DataSource dataSource) {
this.dataSource = dataSource;
}

public Session getSession() {
return sessionFactory.getCurrentSession();
}

public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}

और xml:

 <bean id="hibernateDAO" class="ro.asf.capone.server.dao.HibernateDAOSupport" abstract="true">
<property name="sessionFactory" ref="sessionFactory" />
<property name="dataSource" ref="dataSource" />
</bean>

उत्तर:

जवाब के लिए 0 № 1

मैंने इसका हल बदलकर इसका हल ढूंढ लिया getConnection में कार्यान्वयन HibernateDAOSupport इसके साथ वर्ग:

public Connection getConnection(){
return org.springframework.jdbc.datasource.DataSourceUtils.getConnection(dataSource);
}

धन्यवाद एम। दीनुम ने बताया कि डेटा स्रोत से एक नया कनेक्शन पेश किया जाता है, न कि उसी का उपयोग किया जाता है। मैं इस धारणा के तहत था कि एक एकल कनेक्शन एक लेन-देन करता है।