关于hibernate 事务提交的问题

近期做项目,遇到了一个问题,用hibernate做数据持久化,可是有的业务逻辑要求是这样的,三张表是独立的。
如何将三张表的增删改放到一个事务里面?
比如:我先保存一个新的人员信息。然后再查询出保存完之后的人员信息同时要update另外一张表里面。
问题就是:session.save(obj) 之后再查询的话。这个对象还是游离状态。会查询不到。
所以就不能后面的update操作

8个回答

[quote]session.save() 一个对象的时候,没有commit() 事务 可以查到这个对象生成的ID 吗? [/quote]

:可以, see:
[code="java"]
Session s = openSession();
Transaction tx = s.beginTransaction();
int testLength = 3;
Long lastId = null;
for (int i = 0; i < testLength ; i++) {
Car car = new Car();
car.setColor( "color " + i );
s.save( car );
lastId = car.getId();
}[/code]

[quote]你好!persist 用这个方法 先保存新对象,然后再 用getter 能得到新生成的这个对象ID 么?[/quote]

可以, see:

[code="java"] Session s = openSession();
Transaction tx = s.beginTransaction();
Radio radio = new Radio();
radio.setFrequency("32 MHz");
s.persist(radio);
assertEquals( new Integer(1), radio.getId() );
radio = new Radio();
radio.setFrequency("32 MHz");
s.persist(radio);
assertEquals( new Integer(2), radio.getId() );
tx.commit();
s.close();[/code]

……
session.save(obj)之后根本不用查询,传入的obj本身就是托管状态了,可以直接用。

在同一个session里怎么会查询不到呢

[code="java"]
trans = session.beginTransaction(); //开始事务
session.save(t);
Query query = session.createQuery(hql);
trans.commit(); //提交事务
[/code]

首先你的那个对象是个新的对象是临时对象,然后你要吧这个对象update到另外一个表中,那个表中应该就是有这个数据的他是持久状态的。反正我是晕了。
你要是说保存这个对象的同时要拿到这个对象所生成的Id,然后在插入到另外一张表的话,你可以直接使用的保存的那个对象就可以getter他生成的Id了。建议在事务中使用persist来实现持久化别用save。

[quote]
你好,session.save() 一个对象的时候,没有commit() 事务 可以查到这个对象生成的ID 吗?
可能我上面的问题 没有描述清楚。谢谢
[/quote]
我记得是可以的,不过这种其实不用再问了,自己测试一下不就行了……

[quote]session.save() 一个对象的时候,没有commit() 事务 可以查到这个对象生成的ID 吗? [/quote]
可以的。

[code="java"]
trans = session.beginTransaction(); //开始事务

session.save(a);

b.setParentId(a.getId);
session.save(b);
c.setParentId(b.getId);
session.save(c);
trans.commit();
[/code]

首先,先说一下主键ID的生成跟事务的关系,就是主键ID是不在事务里面的(除非你自己设置其值),如果添加一个对像,但没有提交事务,这个对像的ID是会有值的,然后你又回滚了事务,这时你再次查这个主键ID的下一个值(比如MYSQL的AUTO或ORACLE的SEQUENCE)已经发生变化了,也就是说这个主键ID下次生成的值并不会是你回滚前的值了。

因此,你在保存一个未提交的对像后,是可以拿到他的ID给下一次操作使用的,如果在这一系列操作中回滚了事务,那主键ID是以最新值开始(也就是中间跳空了很多,并不连续了)。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在Hibernate声明式事务中,提交事务抛出异常

感谢在前 在使用Spring+Hibernate声明式事务中,需要插入大量数据,为了提高插入效率, 需要每隔固定条数提交一次错误,但是在提交事务之后,声明式事务自动提交时就 会抛出异常: Could not commit Hibernate transaction; nested exception is org.hibernate.Tra nsactionException: Transaction not successfully started 如何才能在声明事务中提交事务,而不产生异常? 代码如下: ![代码参见图片](https://img-ask.csdn.net/upload/201509/29/1443520489_213699.jpg) 异常信息如下: ![异常信息] (https://img-ask.csdn.net/upload/201509/29/1443520664_162795.jpg)

Hibernate手动事务管理问题

[code="java"] public void deleteMoreFlowCards(String[] vouNos) { String tempVouNos = VouNoGenerator.getString(vouNos, ","); String sql = "delete from t_flow_card where vouNo in("+tempVouNos+")"; String flowCardDetailSql = "delete from t_flow_card_detail where vou_no in("+tempVouNos+")"; [color=red]此处使用getCurrentSession,就抱Transaction not successfully started openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭 而openSession不会,需手动提交,可和这没关系啊。[/color] Session session = getHibernateTemplate().getSessionFactory().openSession(); //Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //SQLQuery sqlQuery = session.createSQLQuery(sql); Connection conn = null; PreparedStatement psmt=null; Transaction tx = null; try { //conn.setAutoCommit(false); tx = session.beginTransaction(); conn = session.connection(); psmt = conn.prepareStatement(flowCardDetailSql); psmt.executeUpdate(); psmt = conn.prepareStatement(sql); psmt.executeUpdate(); System.out.println("commit"+conn.getAutoCommit()); //conn.commit(); tx.commit(); } catch (SQLException e) { e.printStackTrace(); if(tx != null){ tx.rollback(); } /*if(conn != null){ try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } }*/ }finally{ try { //conn.setAutoCommit(true); psmt.close(); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } //sqlQuery.executeUpdate(); } [/code] 描述见红色字体 补充:Hibernate 使用jdbc进行批量删除时,事务管理是使用Connection来管理还是使用Hibernate封装好的Transaction来管理呢?请给建议。谢谢。 字不变红,再补: [color=red]此处使用getCurrentSession,就抱Transaction not successfully started openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭 而openSession不会,需手动提交,可和这没关系啊。[/color] Session session = getHibernateTemplate().getSessionFactory().openSession(); [b]问题补充:[/b] [color=red] getCurrentSession就指得到当前可用的session,如果压根就没开启事务, [/color] 我事务管理采用的spring的事务管理,不要我手动开啊, [color=red] getCurrentSession就指得到当前可用的session [/color],如果没有会开新的吧

spring3+hibernate4中使用spring管理事务,事务不自动提交问题

<div class="iteye-blog-content-contain" style="font-size: 14px;"> <pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd "&gt; &lt;context:property-placeholder location="classpath:hibernate.properties" /&gt; &lt;context:annotation-config&gt;&lt;/context:annotation-config&gt; &lt;context:component-scan base-package="com.*"&gt; &lt;context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /&gt; &lt;/context:component-scan&gt; &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt; &lt;property name="driverClassName" value="${hibernate.driverClassName}"&gt;&lt;/property&gt; &lt;property name="url" value="${hibernate.url}"&gt;&lt;/property&gt; &lt;property name="username" value="${hibernate.name}"&gt;&lt;/property&gt; &lt;property name="password" value="${hibernate.password}"&gt;&lt;/property&gt; &lt;/bean&gt; &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"&gt; &lt;property name="dataSource" ref="dataSource"&gt;&lt;/property&gt; &lt;property name="hibernateProperties"&gt; &lt;props&gt; &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.OracleDialect &lt;/prop&gt; &lt;prop key="hibernate.show_sql"&gt;true&lt;/prop&gt; &lt;prop key="hibernate.hbm2ddl.auto"&gt;update&lt;/prop&gt; &lt;prop key="hibernate.current_session_context_class"&gt;org.springframework.orm.hibernate4.SpringSessionContext&lt;/prop&gt; &lt;prop key="hibernate.query.factory_class"&gt;org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory&lt;/prop&gt; &lt;prop key="hibernate.jdbc.fetch_size"&gt;50&lt;/prop&gt; &lt;prop key="hibernate.jdbc.batch_size"&gt;25&lt;/prop&gt; &lt;prop key="hibernate.temp.use_jdbc_metadata_defaults"&gt;false&lt;/prop&gt; &lt;/props&gt; &lt;/property&gt; &lt;property name="mappingResources"&gt; &lt;list&gt; &lt;value&gt; com/entity/User.hbm.xml &lt;/value&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; &lt;bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"&gt; &lt;property name="sessionFactory" ref="sessionFactory"&gt;&lt;/property&gt; &lt;/bean&gt; &lt;!-- 开启AOP监听 只对当前配置文件有效 --&gt; &lt;aop:aspectj-autoproxy expose-proxy="true" proxy-target-class="true"/&gt; &lt;!-- 开启注解事务 只对当前配置文件有效 --&gt; &lt;tx:annotation-driven transaction-manager="transactionManager" mode="aspectj" proxy-target-class="true"/&gt; &lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt; &lt;tx:attributes&gt; &lt;tx:method name="get*" propagation="REQUIRED"/&gt; &lt;tx:method name="delete*" propagation="REQUIRED"/&gt; &lt;tx:method name="update*" propagation="REQUIRED" /&gt; &lt;tx:method name="add*" propagation="REQUIRED" /&gt; &lt;tx:method name="*" propagation="REQUIRED"&gt;&lt;/tx:method&gt; &lt;/tx:attributes&gt; &lt;/tx:advice&gt; &lt;aop:config expose-proxy="true" proxy-target-class="true"&gt; &lt;aop:pointcut expression="within(com.*)" id="allMethod" /&gt; &lt;aop:advisor advice-ref="txAdvice" pointcut-ref="allMethod" /&gt; &lt;/aop:config&gt; &lt;/beans&gt;</pre> <pre name="code" class="java">package com.test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import com.dao.UserDao; import com.entity.User; @ContextConfiguration({"classpath:applicationContext.xml"}) @Transactional @RunWith(SpringJUnit4ClassRunner.class) public class Test { @Autowired private UserDao userDao; @org.junit.Test public void test() { User user=new User(); user.setEMail("993126013@qq.com"); user.setRealname("张三"); user.setPassword("12333333"); user.setMobile("15850597175"); user.setSex("1"); user.setUsername("zhulljk"); int i=userDao.addUser(user); System.out.println(userDao.getUsername(user.getUsername()).getId()); } }</pre> <pre name="code" class="java">Hibernate: select MYSEQ.nextval from dual org.hibernate.internal.SessionFactoryImpl@1de8adb Hibernate: insert into ZHUT.S_USER (USERNAME, REALNAME, PASSWORD, SEX, TELPHONE, MOBILE, E_MAIL, ID) values (?, ?, ?, ?, ?, ?, ?, ?) Hibernate: select this_.ID as ID0_0_, this_.USERNAME as USERNAME0_0_, this_.REALNAME as REALNAME0_0_, this_.PASSWORD as PASSWORD0_0_, this_.SEX as SEX0_0_, this_.TELPHONE as TELPHONE0_0_, this_.MOBILE as MOBILE0_0_, this_.E_MAIL as E8_0_0_ from ZHUT.S_USER this_ where this_.USERNAME=? 41</pre> <pre name="code" class="java">sql已经执行成功,但是事务没有提交,我使用spring来管理事务,不知道哪个地方出现错误,求解惑。。</pre> <p> </p> <p> </p> </div>

Hibernate 事物提交之前数据存储在哪里

最近一个项目,一个事物持续操作时间较长,远程数据库服务器感觉不稳定,导致事物还未提交,出现网络断开现象,有几次还导致事物回滚失败,把数据都丢失了,我想知道,hibernate 中事物提交之前数据是缓存到了数据库所在的服务器,还是在java运行的服务器上?求解,没钱。

[讨论]Spring中事务管理与Hibernate自带事务管理冲突的一个问题

<p><span style="font-size: small;">场景是这样: <br>    有个提交申请单的操作,需三个动作:新增申请记录表记录、新增申请详单表记录,整个过程需完整,才能提交事务,其中一个过程失败,则需回到操作前状态,采用的是Spring声明式事务配置,但新增申请详单表记录时,由于插入数据量较大,发现用默认的HibernateTemplate里的save方法一条一条记录添加速度较慢,就使用了Hibernate批量插入,发现如果过程无错误,也会提示一个错误:java.lang.IllegalStateException: No value for key [org.hibernate.impl.SessionFactoryImpl@12421db] bound to thread [http-8080-Processor20] <br>,查了下估计是由于批量插入那边用了Hibernate自带的事务管理,释放了Hibernate下的session,和Spring配置的事务管理有冲突,有没有可以支持Spring自带事务管理,并且支持批量插入大量数据的方法,请教大家如何解决呢? </span></p> <p><span><font style=""> <p><br><span style="font-size: small;">附上大致代码:</span></p> </font></span></p> <p> </p> <p> </p> <p><span style="font-size: small;"> </span></p> <p><span style="font-size: small;">申请Service实现类大致Java代码:</span></p> <p> </p> <p> </p> <pre name="code" class="java">public void applyCard(CardInfo cardInfo, List&lt;CardDetail&gt; cardDetails){ //新增申请记录表记录 applyDAO.saveCardInfo(cardInfo); //新增申请详单表记录 applyDAO.batchSaveCardDetail(cardDetails); }</pre> <p> </p> <p><span style="font-size: small;">申请applyDAO实现类的batchSaveCardDetail方法(Hibernate批量插入):</span></p> <p><span style="font-size: small;"> </span></p> <p><span style="font-size: small;"><font style="" size="3"> <pre name="code" class="java">public void batchSaveCardDetail(List&lt;TCardInfo&gt; cardDetails) { Session session = this.getSession(); Transaction tx=null; try{ tx=session.beginTransaction(); for(int i=0;i&lt;cardDetails.size();i++){ session.save(cardDetails.get(i)); if(i%50 == 0){ session.flush(); session.clear(); } } tx.commit();//提交事务 }catch(Exception ex){ ex.printStackTrace(); tx.rollback();//出错则回滚 }finally{ session.close();//关闭session } }</pre> </font></span> </p> <pre name="code" class="java"></pre> <p><span style="font-size: small;"> <p>Spring相关配置如下:</p> <p> </p> <pre name="code" class="xml">&lt;!-- 应用的Spring里的Hibernate事务管理 --&gt; &lt;bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; &lt;property name="sessionFactory" ref="sessionFactory" /&gt; &lt;/bean&gt; &lt;!-- 配置事务拦截器--&gt; &lt;bean id="transactionInterceptor" class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; &lt;property name="transactionManager" ref="transactionManager" /&gt; &lt;property name="transactionAttributes"&gt; &lt;props&gt; &lt;prop key="applyCard"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; &lt;/props&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 根据事务拦截器为目标bean自动创建事务代理 --&gt; &lt;bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt; &lt;property name="beanNames"&gt; &lt;list&gt; &lt;value&gt;applyService&lt;/value&gt; &lt;/list&gt; &lt;/property&gt; &lt;property name="interceptorNames"&gt; &lt;list&gt; &lt;value&gt;transactionInterceptor&lt;/value&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 申请Service --&gt; &lt;bean id="applyService" class="service.impl.ApplyServiceImpl"&gt; &lt;property name="applyDAO" ref="applyDAO"/&gt; &lt;/bean&gt;</pre> <p>  </p> <font style="" size="3"> <p> </p> </font></span></p> <p> </p>

Hibernate 嵌套事务,大神请进!

Hibernate、Spring整合,使用HibernateTransactionManager事务管理器,在使用nested嵌套事务的时候,子事务出错时回滚到savepoint,但是Hibernate并没有把出错的操作移除,导致主事务提交的时候session flush又报错,最终主事务和子事务都回滚了。 环境:Spring3.0.2,Hibernate3.6.0,Mysql5.6; 异常是null id in Album entry (don't flush the Session after an exception occurs)【这个是我自己让它报错的,数据库非空校验不过】, 并不是Transaction rolled back because it has been marked as rollback-only。 代码逻辑大致如下: ``` ServiceA { @Transactional(propagation = Propagation.NESTED) @Override public void error() throws Exception { A a = new A(); aDao.save(a); } } ServiceB { @Transactional(propagation = Propagation.REQUIRED) @Override public void success() throws Exception { B b = new B(); b.setName("456"); bDao.save(b); try { aService.error(); } catch (Exception e) { // 这里调用的是ServiceA的error,这是不是Dao,目的用于测试嵌套事务。 } } } ```

hibernate提交事务报错,在线等!!!

事务使用的时spring-tx的注解 ``` [ERROR 15:53:03,643] Job DEFAULT.generateCheckPlanCalJob threw an unhandled Exception: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'generateCheckPlan' on target class [class com.sun.proxy.$Proxy60] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:320) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113) at org.quartz.core.JobRunShell.run(JobRunShell.java:213) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) Caused by: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:522) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at com.sun.proxy.$Proxy60.generateCheckPlan(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273) at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:311) ... 3 more Caused by: javax.persistence.RollbackException: Error while committing the transaction at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93) at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:513) ... 17 more Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76) ... 18 more [ERROR 15:53:03,649] Job (DEFAULT.generateCheckPlanCalJob threw an exception. org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'generateCheckPlan' on target class [class com.sun.proxy.$Proxy60] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction] at org.quartz.core.JobRunShell.run(JobRunShell.java:224) at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557) Caused by: org.springframework.scheduling.quartz.JobMethodInvocationFailedException: Invocation of method 'generateCheckPlan' on target class [class com.sun.proxy.$Proxy60] failed; nested exception is org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:320) at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:113) at org.quartz.core.JobRunShell.run(JobRunShell.java:213) ... 1 more Caused by: org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Error while committing the transaction at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:522) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:755) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:724) at org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:475) at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:270) at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) at com.sun.proxy.$Proxy60.generateCheckPlan(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:273) at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:311) ... 3 more Caused by: javax.persistence.RollbackException: Error while committing the transaction at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:93) at org.springframework.orm.jpa.JpaTransactionManager.doCommit(JpaTransactionManager.java:513) ... 17 more Caused by: java.lang.IndexOutOfBoundsException: Index: 1, Size: 0 at java.util.ArrayList.rangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185) at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51) at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216) at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383) at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133) at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:76) ... 18 more ```

Hibernate和纯jdbc连接共同使用产生的事务问题

最近在项目里遇到了一个问题,新系统持久化使用的是hibernate3,但是为了实现一些功能必须调用一个另外的老系统(和新系统是同一个数据库,部署在同一个wls的domain下)的jar包内提供的方法,但是这个老的系统持久化使用的是jdbc的方式连接的数据库,但是数据源的获取方式和新系统一样,都是通过jndi从wls上查找。可是这样就产生了事务问题,hibernate3的事务提交都是用spring控制的,而老系统的jar方法必须要手动commit才能提交事务,可是这样,一旦hibernate的事务异常,产生了回滚,jar包提供的方法持久化的数据就无法回滚。 各位持久化方面的大师,有没有什么好的建议,怎么解决这个问题,或者有其他的方法让hibernate和jdbc的方式和平共处。 [b]问题补充:[/b] 感谢各位的关注,不过我找到了一个刚好的方法,Spring里有个DataSourceUtil的类,通过getConnection方法可以把当前连接和当前线程绑定,这样两种持久化的方式使用的是同一个connection,也就达到了事务一致。

spring+hibernate 在oracle经常出现未提交的事务

<p><br><br>错误描述:系统在运行一个不定的时间后,在数据库中会产生一个未提交的事务,经查访问 <br>日志,通常是在添加或更新操作时产生的,该事务所在的连接被其他线程使用后,会导致其他数据 <br>库操作都被阻塞,最终导致系统无法访问。该错误经开发人员手动测试和压力测试都未能重现,数 <br>据均能正常提交,而且在多个dao中都会出现。 <br><br><br>系统环境: <br>redhat5,oracle10,jdk1.6,tomcat6,spring2,hibernate3,dbcp <br><br>以下是某个Dao的典型代码及配置 <br>public class BaseDAO { <br><br>public final int RESULT_FETCH_SIZE=100; <br>protected DataSource dataSource = null; <br>protected SessionFactory sessionFactory = null; <br>    protected HibernateTemplate ht = null; <br>    protected JdbcTemplate jt = null; <br><br>    public void setSessionFactory(SessionFactory factory) <br>    { <br>        sessionFactory = factory; <br>        ht  = new HibernateTemplate(sessionFactory); <br>    } <br>   <br>    public BaseDAO() <br>    { <br>    <br>    } <br><br>public DataSource getDataSource() { <br>return dataSource; <br>} <br><br>public void setDataSource(DataSource dataSource) { <br>this.dataSource = dataSource; <br>jt=new JdbcTemplate(dataSource,false); <br>} <br>   <br>} <br>实现的dao <br>public class CmsmailboxDao extends BaseDAO implements ICmsmailboxDao{ <br><br>public void createBean(final Cmsmailbox bean) throws DataAccessException{ <br>this.ht.save(bean); <br>} <br>public Cmsmailbox getBean(String ctid) throws DataAccessException { <br>return (Cmsmailbox) this.ht.get(Cmsmailbox.class, ctid); <br>} </p> <p> public Collection getBeans(final String cmbid,final String cmbtitle,final int offset, final int rowsToReturn, final String sort,<br>   final String order) throws DataAccessException {<br>  return (Collection) ht.execute(new HibernateCallback() {<br>   public Object doInHibernate(Session session)<br>     throws HibernateException {<br>    StringBuffer buf = new StringBuffer();<br>    buf.append("from com.xxx.Cmsmailbox bean ");</p> <p>    ......</p> <p>    Query query = session.createQuery(buf.toString());</p> <p>    ......</p> <p>    return query.list();</p> <p>   }</p> <p> });</p> <p>}<br>...... <br>} <br>配置文件 <br>&lt;bean id="dataSource" <br>class="org.apache.commons.dbcp.BasicDataSource"&gt; <br>&lt;property name="driverClassName"&gt; <br>&lt;value&gt;${SiteGroupDbDriver}&lt;/value&gt; <br>&lt;/property&gt; <br>&lt;property name="url"&gt; <br>&lt;value&gt;${SiteGroupDbUrl}&lt;/value&gt; <br>&lt;/property&gt; <br>&lt;property name="username"&gt; <br>&lt;value&gt;${SiteGroupDbUser}&lt;/value&gt; <br>&lt;/property&gt; <br>&lt;property name="password"&gt; <br>&lt;value&gt;${SiteGroupDbPassword}&lt;/value&gt; <br>&lt;/property&gt; <br>   &lt;property name="initialSize" value="5"/&gt; <br>   &lt;property name="maxActive" value="40" /&gt;   <br>       &lt;property name="maxIdle" value="30" /&gt;   <br>       &lt;property name="maxWait" value="10000" /&gt;   <br>       &lt;property name="defaultAutoCommit" value="true"/&gt;   <br>       &lt;property name="removeAbandoned" value="true"/&gt;   <br>       &lt;property name="removeAbandonedTimeout" value="30"/&gt;   <br>       &lt;property name="logAbandoned" value="true"/&gt; <br>       &lt;property name="validationQuery" value="SELECT count(*) FROM SSOAPP"/&gt; <br>   &lt;property name="testOnBorrow" value="true"/&gt; <br>&lt;/bean&gt; <br><br>&lt;bean id="baseDAO" class="com.xxx.dao.impl.BaseDAO" abstract="true"&gt; <br>&lt;property name="sessionFactory"&gt; <br>&lt;ref bean="sessionFactory" /&gt; <br>&lt;/property&gt; <br>&lt;property name="dataSource"&gt; <br>&lt;ref bean="dataSource" /&gt; <br>&lt;/property&gt; <br>&lt;/bean&gt; <br><br>&lt;bean name="/sysadmin/distributeCmsMailbox,/sysadmin/statisticCmsMailbox" <br>class="com.xxx.action.CmsMailboxAction"&gt; <br>&lt;property name="cmsMailboxService"&gt; <br>&lt;ref bean="cmsMailboxService" /&gt; <br>&lt;/property&gt; <br>&lt;property name="cmsdepartmentService"&gt; <br>&lt;ref bean="cmsdepartmentService" /&gt; <br>&lt;/property&gt; <br>&lt;property name="cmsdepartmenttypeService"&gt; <br>&lt;ref bean="cmsdepartmenttypeService"/&gt; <br>&lt;/property&gt; <br>&lt;/bean&gt; <br>&lt;bean id="cmsMailboxService" <br>class="com.xxx.service.impl.CmsMailboxService"&gt; <br>&lt;property name="cmsmailboxDao"&gt; <br>&lt;ref bean="cmsmailboxDao" /&gt; <br>&lt;/property&gt; <br>&lt;/bean&gt; <br>&lt;bean id="cmsmailboxDao" class="com.xxx.dao.impl.CmsmailboxDao" <br>parent="baseDAO"&gt; <br>&lt;/bean&gt; <br><br>以上是dao的一种典型配置 <br><br>下面是事务管理器的配置,实际上我的应用并未用到事务处理,只是出现上述错误后,怀疑 <br>是未加事务管理器的问题,结果加上后问题依旧 <br><br>        &lt;bean id="transactionManager" <br>class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt; <br>                &lt;property name="sessionFactory"&gt;&lt;ref <br>bean="sessionFactory"/&gt;&lt;/property&gt; <br>        &lt;/bean&gt; <br>        &lt;bean id="transactionInterceptor" <br>class="org.springframework.transaction.interceptor.TransactionInterceptor"&gt; <br>                &lt;property name="transactionManager" ref="transactionManager"/&gt; <br>                &lt;property name="transactionAttributes"&gt; <br>                        &lt;props&gt; <br>                                &lt;prop key="*"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; <br>                        &lt;/props&gt; <br>                &lt;/property&gt; <br>        &lt;/bean&gt; <br>        &lt;bean <br>class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt; <br>                &lt;property name="beanNames"&gt; <br>                  &lt;value&gt;*Dao&lt;/value&gt; <br>                &lt;/property&gt; <br>                &lt;property name="interceptorNames"&gt; <br>                        &lt;list&gt; <br>                                &lt;value&gt;transactionInterceptor&lt;/value&gt; <br>                        &lt;/list&gt; <br>                &lt;/property&gt; <br>        &lt;/bean&gt; <br><br>目前已经可以排除的可能:1、数据库,在sqlserver下也会出现;2、jdbc驱动;3、hibernate及spring的版本;4、连接池,dbcp和c3p0都会出现 <br><br>感觉对于spring中使用hibernate的方式应该没有错误,应该是哪个地方的配置或是某个部分对整体架构产生了影响,希望大家都能来讨论下,给点思路</p> <p> </p><br/><strong>问题补充</strong><br/>现在已经是true了 <br />那个不设是所有的操作都不会写到数据库<br/><strong>问题补充</strong><br/>昨天用wvs测安全,居然把这个错误重现了,初步判断是和HibernateTemplate的并发有关

关于 spring3+hibernate3.3 在事务下update没有提交sql,必须flush

我的环境是 spring-security3+springMVC+spring3.0.1+hibernate3.3 一下applicationContext-resource.xml中关于事务的配置,使用的注释 [code="java"] <!-- 事务配置 --> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <!-- 使用annotation定义事务 --> <tx:annotation-driven transaction-manager="transactionManager" /> <context:component-scan base-package="com.mxdba"/> [/code] 我在做单元测试时没有问题,update的确是在事务下的 [code="java"] @Test @Rollback(false) public void updateTest() { CompanyArticle companyArticle = companyArticleServ.load(1L); companyArticle.setContent("ddddd"); companyArticleServ.updateArticle(companyArticle, null); } [/code] 但是在正常情况下,update时没有任何反应,但是在update后添加getSession().flush()[color=red]就提交了[/color] 也就是说 事务并没有提交,因为如果事务正常执行的话,会flush的。 所以我在想是不是 事务没有运行,于是我尝试把 整个事务去掉,这时在 [code="java"] public Session getSession() { return sessionFactory.getCurrentSession(); } [/code] 报了 没有绑定sessin,也就是说 事务实在工作的 我也想过是不是 spring-security的问题,因为他是一个filter,而在spring会用到opensessinfilter,不过我尝试过去掉spirng-security 发现问题照旧 我现在实在是没有思路了

springboot2 spring data jpa hibernate5.4 禁止自动提交事务

在Transactional事务内查询对象,在修改了对象属性之后,没有手动保存, 自动提交事务,请问怎么设置不自动提交? ![图片说明](https://img-ask.csdn.net/upload/201902/02/1549074960_213746.png) 在配置文件中配置关闭了自动提交 不起作用

关于spring+hibernate配置jta事务提交后没有持久化到数据库(求大神帮忙看看)

我的环境 spring 5.0+hibernate5.0+atomilkos 我想用二个数据库资源进行jta事物管理 一个mysql 一个oracle 这是我的配置文件:![图片说明](https://img-ask.csdn.net/upload/201612/25/1482674793_65910.png) https://img-ask.csdn.net/upload/201612/25/1482674803_698369.png 这是我的dao代码 https://img-ask.csdn.net/upload/201612/25/1482675145_855437.png 这是我的service代码 https://img-ask.csdn.net/upload/201612/25/1482675038_683404.png 这是单元测试 https://img-ask.csdn.net/upload/201612/25/1482675110_107287.png 控制台输出 https://img-ask.csdn.net/upload/201612/25/1482675173_466045.png 测试能通过中间没有异常抛出,是有事务参与其中。但是数据并未有持久化到数据库。看了spring 的官方文档,关于这快没有详细说明,与hibernate整合jta的详细细节。这里有个问题,配置jta事务是应该通过SessionFactory.getCurrentSession()获取Session,还是通过openSession()获取会话。但是2种方式都试过,没有提交。我单独用jdbc实现的方式,就能正常使用jta的提交与回滚功能。是不是我还有那个地方缺少配置。请大神指点一下!!

hibernate事务开启不成功的错误

package cn.jbit.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; import org.hibernate.service.ServiceRegistryBuilder; import cn.jbit.entity.User; import cn.jbit.util.HibernateUtil; public class test { private static final SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); public static void main(String[] args) { Session session=null; Transaction tx=null; try { Configuration cfg=new Configuration().configure(); ServiceRegistry serviceRegistry=new ServiceRegistryBuilder().applySettings(cfg.getProperties()).buildServiceRegistry(); SessionFactory sessionFactory=cfg.buildSessionFactory(serviceRegistry); session=sessionFactory.openSession(); tx=session.beginTransaction(); User user=new User(); user.setName("liufang"); user.setBorn(sdf.parse("1990-08-06")); session.save(user); tx.commit(); } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); }catch (Exception e) { // TODO: handle exception if(session!=null){ session.getTransaction().rollback(); } }finally{ HibernateUtil.closeSession(session); } } } 报错信息: log4j:WARN No appenders could be found for logger (org.jboss.logging). log4j:WARN Please initialize the log4j system properly. log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. Exception in thread "main" org.hibernate.TransactionException: Transaction not successfully started at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.rollback(AbstractTransactionImpl.java:200) at cn.jbit.test.test.main(test.java:43) 相应jar包如图所示: ![图片说明](https://img-ask.csdn.net/upload/201503/30/1427703883_43525.png) hibernate.xml <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url ">jdbc:mysql://localhost:3306/test</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="show_sql">true</property> <!--<property name="hibernate.hbm2ddl.auto">update</property> --><mapping resource="cn/jbit/entity/User.hbm.xml"/> </session-factory> </hibernate-configuration> User.hbm.xml配置文件 <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Demonstrates use of the enhanced sequence-based identifier generator, with no performance optimizations (the DB is hit everytime when generating a value). --> <hibernate-mapping package="cn.jbit.entity"> <class name="User" table="t_user"> <id name="id" column="id"> <generator class="native"><!-- <param name="table_name">ID_SEQ_TBL_BSC_SEQ</param> --></generator> </id> <property name="name" type="string"/> <property name="born" type="timestamp"/> </class> </hibernate-mapping>

hibernate中的事务问题

package cn.itcast.hibernatetest; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import cn.itcast.entity.User; public class HibernateDemo { @Test public void testAdd() { //第一步 加载hibernate核心配置文件 //到src下面照到一个名词是hibernate.cfg.xml //在hibernate里面封装了一个对象 Configuration cfg=new Configuration(); cfg.configure(); //第二步,创建一个SessionFactory对象 //读取hibernate核心配置文件,创建sessionFactory //在过程中,根据映射关系,在配置数据库里面把表创建 SessionFactory sessionFactory = cfg.buildSessionFactory(); //第三步 使用SessionFactory创建session对象 //类似于连接 Session session = sessionFactory.openSession(); //第四步 开启事务 Transaction tx = session.beginTransaction(); //第五步 写具体逻辑crud操作 User user = new User(); user.setUsername("小王"); user.setPassword("250"); user.setAdress("日本"); //调用session的方法实现添加 session.save(user); //第六步 提交事务 tx.commit(); //第七步 关闭资源 session.close(); sessionFactory.close(); } } 代码tx.commit();报错,输入tx.的时候也没有提示commit()方法,为什么,错误提示好像是Transaction中没有commit方法? 错误提示如下: The type javax.persistence.EntityTransaction cannot be resolved. It is indirectly referenced from required .class files 有没有大神解答下,谢谢了

遇到一个事务无法提交的问题,寻求帮助。

<p>一个很棘手的问题,做的是XML数据导入功能,数据无法提交,也没有出现任何异常,在控制台里面都没有出现插入语句,但如果我单纯的提交一个对象,就是普通的提交数据功能,也是在用一个事务里面,就能提交数据。</p> <p>如果我把这个方法放到另外一个测试项目里面,就能正常的提交数据,这是为什么?</p> <p>代码如下,若代码有问题,请指出。</p> <pre name="code" class="java">/** * 开始导入 * * @param xmlList * XML文件绝对路径数组 * @return */ private int sendImport(String[] xmlList) { Session session = null; try { session = Database.getSession(); Session xmlSession = session.getSession(EntityMode.DOM4J); session.beginTransaction(); for (int i = 0; i &lt; xmlList.length; i++) { inportByXML(xmlSession, xmlList[i]); } session.getTransaction().commit(); } catch (Exception e) { session.getTransaction().rollback(); Database.endTransaction(true); return ERROR_IMPORT; } finally { session.close(); } return IMPORT; } /** * 存入数据库 * * @param xmlSession * @param xmlPath * XML绝对路径 * @throws DocumentException */ private void inportByXML(Session xmlSession, String xmlPath) throws DocumentException { SAXReader reader = new SAXReader(); Document document = reader.read(xmlPath); List entities = document.getRootElement().content(); Iterator it = entities.iterator(); while (it.hasNext()) { Node item = (Node) it.next(); xmlSession.save(c.getName(), item); } }</pre> <p> </p>

hibernate执行save方法之后(未提交事务)立刻执行flush方法为什么会执行更新操作?

hibernate执行save方法之后(未提交事务)立刻执行flush方法为什么会执行更新操作?而且每执行一次flush方法就会打印一条update语句?这是为何?请各位大神指教!

Hibernate 在同一个事务里执行插入之后懒加载查询问题

这样一段代码:他们是在同一个事务下的 ``` public class ObjectA{ private String id; private ObjectB objectB; ...get/set方法; } public void functionA(){ ObjectA a = new ObjectA(); dao.add(a); functionB(a.getId); dao.commit(); } public void functionB(String id){ ObjectA pa = dao.get(ObjectA, id); //根据id查询对象 ObjectB b = pa.getObjectB(); //这里获取的值为空,但数据库里面是有数据的 } ``` ``` public void functionA(){ ObjectA a = new ObjectA(); a.setObjectB(dao.get(ObjectB.class, id)); //将ObjectB查询出来,set到ObjectA中 dao.add(a); functionB(a.getId); dao.commit(); } public void functionB(String id){ ObjectA pa = dao.get(ObjectA, id); //根据id查询对象 ObjectB b = pa.getObjectB(); //这样就没问题了 } ``` ObjectA和ObjectB是多对一的关系,配置如下 ``` <many-to-one name="objectB" class="com.*.*.ObjectB" insert="false" update="false"> <column name="objectB_id" length="32" /> </many-to-one> ``` 请大神解释下这是为什么?谢谢!!!

hibernate save、delete添加事务

我是用的myeclipse,在添加hibernate框架的时候,自动生成了xxxxxDao方法,在这里边有save跟delete方法,但这些方法都默认的使用了事务。当我调用他们的时候可能需要多个save放到一个事务里执行,这样就会报错,应该怎么办呢

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

ArrayList源码分析(入门篇)

ArrayList源码分析 前言: 写这篇博客的主要原因是,在我上一次参加千牵科技Java实习生面试时,有被面试官问到ArrayList为什么查找的速度较快,插入和删除的速度较慢?当时我回答得不好,很大的一部分原因是因为我没有阅读过ArrayList源码,虽然最后收到Offer了,但我拒绝了,打算寒假学得再深入些再广泛些,下学期开学后再去投递其他更好的公司。为了更加深入理解ArrayList,也为

我以为我学懂了数据结构,直到看了这个导图才发现,我错了

数据结构与算法思维导图

String s = new String(" a ") 到底产生几个对象?

老生常谈的一个梗,到2020了还在争论,你们一天天的,哎哎哎,我不是针对你一个,我是说在座的各位都是人才! 上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。 也就是说准确答案是产生了一个或两个对象,如果常量池中原来没有 ”宜春” ,就是两个。...

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

玩转springboot启动banner定义所得

最近接手了一个springboot项目,不是不熟悉这个框架,启动时打印的信息吸引了我。 这不是我熟悉的常用springboot的打印信息啊,我打开自己的项目: 还真是的,不用默认的感觉也挺高大上的。一时兴起,就去研究了一下源代码,还正是有些收获,稍后我会总结一下。正常情况下做为一个老程序员,是不会对这种小儿科感兴趣的,不就是一个控制台打印嘛。哈哈! 于是出于最初的好奇,研究了项目的源代码。看到

带了6个月的徒弟当了面试官,而身为高级工程师的我天天修Bug......

即将毕业的应届毕业生一枚,现在只拿到了两家offer,但最近听到一些消息,其中一个offer,我这个组据说客户很少,很有可能整组被裁掉。 想问大家: 如果我刚入职这个组就被裁了怎么办呢? 大家都是什么时候知道自己要被裁了的? 面试软技能指导: BQ/Project/Resume 试听内容: 除了刷题,还有哪些技能是拿到offer不可或缺的要素 如何提升面试软实力:简历, 行为面试,沟通能...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

终于懂了TCP和UDP协议区别

终于懂了TCP和UDP协议区别

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

立即提问
相关内容推荐