我想使用 Hibernate 将一些对象保存到具有预定义 ID 的数据库中。是否可以使用 Hibernate session 的保存方法来做到这一点?
我知道有以下解决方法:
1) 使用必要的插入语句执行 SQL 脚本:
insert into MyObj(id,name) values (100,'aaa'), (101,'bbb');
2) 在 Hibernate 中使用 SQL 查询:
public static boolean createObj(Long id, String name) {
Session session = HibernateUtil.getSessionFactory().getCurrentSession();
if (session.get(MyObj.class, id) == null) {
session.beginTransaction();
SQLQuery sqlQuery = session.createSQLQuery
("insert into myobj(id,name) values(?,?)");
sqlQuery.setLong(0, id);
sqlQuery.setString(1, name);
sqlQuery.executeUpdate();
session.getTransaction().commit();
return true;
} else {
return false;
}
}
但是:是否可以不用 SQLQuery?
在 Hibernate 引用中的 11.2. Making objects persistent 部分有代码示例:
Alternatively, you can assign the identifier using an overloaded version of save().
DomesticCat pk = new DomesticCat();
pk.setColor(Color.TABBY);
pk.setSex('F');
pk.setName("PK");
pk.setKittens( new HashSet() );
pk.addKitten(fritz);
sess.save( pk, new Long(1234) );
但我找不到如何执行此操作的示例。
那么,是否可以在不使用 SQL 查询的情况下使用 Hibernate 将具有提供的 ID 的新对象保存到数据库中?如果是那么如何? 以及如何重载 Hibernate 引用中提到的 session 方法 save() ?
谢谢!
最佳答案
文档要求您不要自己覆盖save
,而是使用带有两个参数的save
的变体。有关详细信息,请参阅 [JavaDocs][1]。
YourEntity entity = // ..
entity.setFoo(foo);
entity.setBar(bar);
//..
session.save(entity, theIDYouWantToUse);
[1]: http://docs.jboss.org/hibernate/core/3.6/javadocs/org/hibernate/Session.html#save(java.lang.String , java.lang.Object)
关于java - 使用提供的 ID 使用 Hibernate 保存新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4047175/