我试图将对象保存到数据库,但它没有保存到数据库中。
用户详细信息.java
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="USER_DETAILS")
public class UserDetails {
@Id @GeneratedValue()
@Column(name="USER_ID")
private int userId;
@Column(name="USER_NAME")
private String userName;
//...getter and setters
}
应用程序.java
public class App {
public static void main(String[] args) {
UserDetails user = new UserDetails();
user.setUserName("abc");
SessionFactory factory = new Configuration().configure().buildSessionFactory();
Session session = factory.openSession();
Object o = session.save(user);
System.out.println("User saved with id - " +o);
System.out.println("HashCode of session 1st "+session.hashCode());
session.close();
session = factory.openSession();
System.out.println("HashCode of session 2nd "+session.hashCode());
UserDetails user1 =(UserDetails)session.get(UserDetails.class,Integer.valueOf(o.toString()));
System.out.println(user1.getUserName());
session.close();
}
}
记录档:
Hibernate: insert into USER_DETAILS (USER_ID, USER_NAME) values (default, ?)
Hibernate: values identity_val_local()
User saved with id - 1
HashCode of session 1st 9299042
HashCode of session 2nd 12206609
Hibernate: select userdetail0_.USER_ID as USER1_0_0_, userdetail0_.USER_NAME as USER2_0_0_ from USER_DETAILS userdetail0_ where userdetail0_.USER_ID=?
abc
我没有使用事务,我知道如果我将session.save代码放在session.beginTransaction()和session.getTransaction().commit()中,数据将保存在数据库中。但由于我也在执行session.get,我在执行www.example.com()时获得了IDsession.save,我如何取回对象?
如果是一级缓存,那么如何..因为我也在关闭会话并打开一个新会话。我也没有配置任何二级缓存。
请提供宝贵的意见。
1条答案
按热度按时间wnavrhmk1#
日志显示,尽管没有可见的事务,对象还是被插入到数据库中,然后被读取。您可能处于自动提交的情况下,或者至少,因为Hibernate已经刷新了数据库中的更改,所以它们在同一个sql连接中是可见的(即使提交还没有完成)。