【问题标题】:JPA with dynamic WHERE statement and handling JPA joins in MVC具有动态 WHERE 语句的 JPA 并在 MVC 中处理 JPA 连接
【发布时间】:2018-05-06 09:43:19
【问题描述】:

我有 2 个关于设置 JPA 项目的通用问题。

问题 1:
我需要能够基于表/实体列的不同组合运行查询。
例如 : 如果一个表有 10 列。这意味着有很多可能的组合。
我是否需要在我的 DAO 和服务层中为每个独特的组合编写函数?
是否可以编写一个通用函数来避免在 DAO 和服务层编写大量函数?我将如何进行?

问题 2:
我有 2 个表和相应的 DAO 和服务。
如果我必须进行“加入查询”,我是否应该为此加入创建新的 DAO 和服务?或者我可以直接在服务中而不是使用 EntityManager 的 DAO(如休眠中的 Session)创建服务并直接处理查询?

很多问题在我脑海中盘旋,但这两个对我来说是最重要的,并且会帮助我前进。

【问题讨论】:

  • 你的问题有点太宽泛了。如果您有两个问题,请分别提出两个问题。还尝试为每个问题提供一些更详细的示例,最好使用代码和您难以进行的地方。否则你可能得不到很多答案,或者你的问题甚至可能被删除。
  • 改进的语言和问题

标签: java spring hibernate spring-mvc jpa


【解决方案1】:

问题一:看这里:Spring data JPA with dynamic where clause

问题 2:在某一时刻,您需要选择如何表示连接的数据。您可以编写一个新类,并将连接的数据转换为它。

所以table1:PhoneBookEntry,table2:Person,你加入这些,然后把它变成一个新的对象,你自己调用ContactInfo。

public List<ContactData> getContacts(){
    ArrayList<ContactData> result = new ArrayList<ContactData>();

    List<Object[]> resultRows = em.createQuery("SELECT p.firstName, p.lastName, n.phoneNumber FROM Person p LEFT JOIN PhoneBookEntry n ON p.firstName = n.firstName AND p.lastName = n.lastName").getResultList();

    for (Object[] row : resultRows) {
        result.add(new ContactData(result[0], result[1], result[2]));
    }

    return result;
}

【讨论】:

    猜你喜欢
    • 2017-05-25
    • 2011-05-05
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多