【问题标题】:How to Convert the object of ResultSet to Hibernate Entity Bean如何将 ResultSet 的对象转换为 Hibernate Entity Bean
【发布时间】:2012-04-01 18:56:49
【问题描述】:

我有一个项目,在这个项目开始的时候我们选择了Hibernate而不是JDBC来进行持久化,但是我们发现Hibernate不能适用于这个应用中的所有情况,所以在这些情况下我们必须使用JDBC来进行持久化Hibernate 不能申请的。 最后,我们选择 jooq 而不是 JDBC。所以这个应用中有两种持久化技术,即Hibernate&Jooq。 现在,我们要将 jooq 创建的 ResultSet 转换为 Hibernate Entity Beans。我搜索了有关 Hibernate 的资源,但没有找到任何东西。 Hibernate 似乎没有它的 API。

所以,我有几个问题!

  1. 如何获取 Hibernate 的当前上下文?
  2. 如何使用此上下文将 ResultSet 的对象转换为 Hibernate Entity Bean(在问题 1 中提到)?

谢谢大家。

【问题讨论】:

  • 你能找到一些你不能使用休眠的例子吗?
  • 很抱歉我的描述有误,我刚才问了PM,答案是我们使用JDBC只是因为一些开发人员的习惯!现在我们使用 jooq 查询并返回一个 ResultSet 的对象,我想将其转换为 Hibernate Entity beans。

标签: hibernate entity resultset jooq


【解决方案1】:

你看过 jOOQ 的 Record.into()ResultQuery.fetchInto() 方法吗?它们支持将 jOOQ 记录映射到自定义 POJO。您可以直接使用 jOOQ 生成这些 POJO,也可以自己定义它们。如果您的 POJO 上存在 JPA 注释,则将使用这些注释。否则,jOOQ 会根据方法命名约定将记录映射到您的 POJO。

一个例子:

@Entity
public class POJO {
  private int id;

  @Column(name = "ID")
  public void setId(int id) {
    this.id = id;
  }

  public int getId() {
    return id;
  }
}

// Fetch several of the above POJO's into a list
List<POJO> result = 
DSL.using(connection, dialect)
   .select(MY_TABLE.ID)
   .from(MY_TABLE)
   .fetchInto(POJO.class);

// Fetch single POJO's
POJO pojo = 
DSL.using(connection, dialect)
   .select(MY_TABLE.ID)
   .from(MY_TABLE)
   .where(MY_TABLE.ID.equal(1))
   .fetchOne()
   .into(POJO.class);

现在在上面的示例中,您将使用 jOOQ 来执行查询。由于您正在谈论将 ResultSet 对象转换为您的自定义 POJO,我猜您只是将 jOOQ 用作查询构建器。也许,在这种情况下,您仍然可以像这样使用 jOOQ 到 fetch data from a JDBC ResultSet

ResultSet rs = // [ your querying here ]
List<POJO> result = create.fetch(rs).into(POJO.class);

【讨论】:

    【解决方案2】:

    既然你决定使用JDBC,你必须编写hibernate为你做的事情。这意味着,您需要编写代码来读取 ResultSet 并填写 Bean。

    喜欢,

    MyBean mb = new MyBean();
    mb.setValue1(resultSet.get...);
    

    现在,忘记上面的内容,如果您刚开始一个项目,我强烈建议您考虑使用 Hibernate。启动休眠here

    【讨论】:

    • 谢谢你的想法,但是我需要一个更自动化的转换器。也就是说,这个转换器可以处理所有的Hibernate Entity Beans,我想根据这个的ORM设置将ResultSet的对象转换为Beans由 Hibernate 管理的 Bean。我认为一定有一个Hibernate自己的类来处理它,因为Hibernate知道Beans的这些ORM细节。
    • 如果你不使用hibernate,那么为什么要将结果转换为Hibernate Entity Beans?称它们为 POJO。Hibernate 仅在您使用它连接数据库时才知道 ORM 详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多