gpt4 book ai didi

java - 从 Oracle View 的结果中获取多个对象

转载 作者:行者123 更新时间:2023-11-30 10:23:34 24 4
gpt4 key购买 nike

在我的 Oracle 数据库中,我有两个示例表:

  • tabel A 包含 ida1a2a3
  • tabel B 包含 idb1b2b3

我有从这两个表中获取信息的 View :

CREATE VIEW Foo ("A.id", "A.a1", "A.a2", "A.a3", "B.id", "B.b1", "B.b2", "B.b3") AS
SELECT aaa.*, bbb.*
FROM A aaa, B bbb
WHERE
...some conditions...;

在我的 Java 应用程序中,我想通过 Hibernate 的 Foo View 获取信息结果。所以我必须使用 createSQLQuery() 方法:

public List<SomeObject> findSomeObjects() {
Query q = sessionFactory.getCurrentSession()
.createSQLQuery("select f.* from Foo f")
.addEntity(A.class).addEntity(B.class);
List l = q.list();

//here I want to get object of A class and B class from return l
//and prepare return list of SomeObject
}

SomeObject 是 A 类和 B 类的集合。

我在从返回列表中获取 A 类和 B 类的对象并构造 SomeObject 列表时遇到问题。我怎样才能正确地做到这一点?

编辑

  • A多了一列fk_c,它是C表的外键
  • B多了一列fk_d,它是D表的外键

最佳答案

创建一个域类,其中包含 View “Foo”中存在的所有字段,如下所示。

Class Foo {

private String a_id;
private String a1;
private String a2;
private String a3;
private String b_id;
private String b1;
private String b2;
private String b3;

// Getters
// Setters
}

修改您的 SQL 查询如下:

public List<SomeObject> findSomeObjects() {
Query q = sessionFactory.getCurrentSession()
.createSQLQuery("select f.* from Foo f")
.setResultTransformer(Transformers.aliasToBean(Foo.class))
List l = q.list();

// here you can iterate through the list to fetch the fields and
// create a own custom object as per your requirement.

}

替代解决方案:

您还可以为 View “Foo”创建一个实体类,并编写标准查询来获取结果。

请检查以下链接是否相同:

DB View to Hibernate Entity Mapping

How to map a view with Hibernate

编辑:

如果您的 View 中有其他表(C、D)的外键,我建议您通过将关系添加到那些其他依赖实体(C、D)来将此 View 映射为 hibernate 实体类。

@Entity
@Immutable
Class Foo {

private String a_id;
private String a1;
private String a2;
private String a3;
private String b_id;
private String b1;
private String b2;
private String b3;

@OneToMany
@JoinColumn(name = "C_id")
private List<C> c;

@OneToMany
@JoinColumn(name = "d_id")
private List<D> d;

// Getters
// Setters
}

关于java - 从 Oracle View 的结果中获取多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46937358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com