首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate nextval get id

Hibernate nextval get id
EN

Stack Overflow用户
提问于 2010-10-05 15:35:26
回答 4查看 3.2K关注 0票数 2

我使用带注释的Hibernate。我需要使用一个方法将对象插入到数据库中,该方法需要一个我需要计算的参数,为此,我使用:

代码语言:javascript
复制
SQLQuery sqlQuery = getSession().createSQLQuery(queryString);
sqlQuery.executeUpdate();

queryString包含:

代码语言:javascript
复制
INSERT INTO TABLE(ID, NUMBER) VALUES (SEC_TABLE.NEXTVAL, 549)

该对象被插入到数据库中,但是当我尝试获取id时,我得到一个空值。

我能做什么?

当我使用getHibernateTemplate().update(obj);时,获取id没有问题,但是我需要定制sql insert。

谢谢

EN

回答 4

Stack Overflow用户

发布于 2010-10-05 16:37:57

也许我没有得到所有的东西,但是你有没有考虑过通过Session#connection() (可能在Hibernate 4中删除)或者新的Session#doWork()应用程序接口来使用原始的JDBC?如果你需要一个例子,下面是你如何使用它的:

代码语言:javascript
复制
session.doWork(new Work() {
   public void execute(Connection conn) {
      // do work with the connection
      ...
   }
});
票数 1
EN

Stack Overflow用户

发布于 2010-10-05 20:21:35

您的问题有点不清楚,但根据我的理解,我认为您应该首先编写一个准备好的语句,读取序列的下一个值,并在创建insert语句时使用该id。此外,请确保提交事务,并可能刷新会话。

顺便说一句,如果您正在使用带注释的Hibernate,则在将表映射到类时,您可以将id生成器作为序列提供。这样,您不必编写jdbc代码来插入实体,只需编写普通的hibernate代码,即getJdbcTemplate().save()。

票数 0
EN

Stack Overflow用户

发布于 2010-10-05 20:51:12

下面是一个使用注释的序列示例:

代码语言:javascript
复制
@Id
@Column(name = "OFFER_ID")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "OFR_OFFERS_SEQ")
@SequenceGenerator(name = "OFR_OFFERS_SEQ", sequenceName = "OFR_OFFERS_SEQ", allocationSize = 1)
private Long offerId;

此外,add方法应如下所示:

代码语言:javascript
复制
public <T> T add(final T obj) {
     return get(obj.getClass(), (Long) getHibernateTemplate().save(obj));
}
public final <T> T get(final Class<T> clazz, final Long id) {
     return (T) getHibernateTemplate().get(clazz, id);
}

这些方法来自类,而不是从Spring扩展HibernateDaoSupport,这就是它们如何获得hibernate模板的。

希望这对你有用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3861670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档