Как преобразовать объект ResultSet в Hibernate Entity Bean - PullRequest
3 голосов
/ 16 марта 2012

У меня есть проект, в начале этого проекта мы выбрали Hibernate вместо JDBC для постоянства, но мы обнаружили, что Hibernate не может применяться для всех случаев в этом приложении, поэтому мы должны использовать JDBC для сохранения в этих случаях в на который Hibernate не может претендовать. наконец, мы выбираем Jooq вместо JDBC. Таким образом, в этом приложении есть два вида технологий сохранения, то есть Hibernate & Jooq. Теперь мы хотим преобразовать ResultSet, созданный jooq, в Hibernate Entity Beans. Я искал ресурсы о Hibernate, но ничего не узнал. Похоже, что в Hibernate нет API для этого.

Итак, у меня есть несколько вопросов!

  1. Как мне получить текущий контекст Hibernate?
  2. Как я могу преобразовать объект ResultSet в Hibernate Entity Bean, используя этот контекст (упомянутый в вопросе 1)?

Спасибо всем.

Ответы [ 2 ]

3 голосов
/ 17 марта 2012

Рассматривали ли вы методы jOOQ Record.into () и ResultQuery.fetchInto () ? Они поддерживают отображение записей JOOQ на пользовательские POJO. Вы можете сгенерировать эти POJO непосредственно с помощью jOOQ или определить их самостоятельно. Если JPO-аннотации присутствуют в ваших POJO, они будут использованы. В противном случае 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 для извлечения данных из JDBC ResultSet, например:

ResultSet rs = // [ your querying here ]
List<POJO> result = create.fetch(rs).into(POJO.class);
0 голосов
/ 16 марта 2012

Поскольку вы решили использовать JDBC, вы должны кодировать то, что hibernate делает для вас. Это означает, что вам нужно написать код для чтения из ResultSet и заполнить Бины.

Как,

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

Теперь, забудьте об этом, Если вы находитесь в начале проекта, я настоятельно рекомендую рассмотреть Hibernate. Запустите hibernate здесь .

...