java - 使用提供的 ID 使用 Hibernate 保存新对象

标签 java hibernate session

我想使用 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/

相关文章:

php - 如何正确清除我的 php session 数据?

PHP - 每个选项卡的 session

java - 从文本文件中将元素单独添加到队列中

java - 通过多对一或一对一关系查找引用给定类的所有类

java - 当存储过程中有大部分逻辑时,我应该使用 JDBC 还是 Hibernate?

hibernate - Hibernate 中具有组合键的对象上的 List<String> 映射

php - 从所有 session 注销

java - 为什么 Java 常量除以零不会产生编译时错误?

java - JPA、EJB 错误 HHH000262 : Table not found: employee

java - 在 java swing Jtable 中设置隐藏字段值