如果仅从数据库获取数据,我是不是需要实体?

Posted

技术标签:

【中文标题】如果仅从数据库获取数据,我是不是需要实体?【英文标题】:Do I need entities if only getting data from db?如果仅从数据库获取数据,我是否需要实体? 【发布时间】:2014-02-09 17:36:05 【问题描述】:

希望简单的问题:

如果我有一个应用程序应该只从 数据库(它不持久化任何东西)? 我是否需要由一组提供的 db 的精确结构 @Entity 注释的类? 我还需要实体吗?

或者我可以只使用 DAO 并执行以下操作:

ObjectFromDb ob = dao.find(someProperty);

鉴于 ObjectFromDb 只是一个没有单个 JPA 的常规 POJO 注解?

我用谷歌搜索了一会儿,但问题似乎太具体了...感谢您的建议!

【问题讨论】:

【参考方案1】:

您不需要实体进行查询,但它们可以让您的生活更轻松。

您可以use regular SQL进行查询。

您也可以定义一些实体,但只查询其数据的子集 - 即投影查询。

您还可以使用带有投影查询的 JPA 构造函数命令直接映射到您的结果对象:

List<MyClass> dtos = em.createQuery("SELECT NEW com.example.MyClass( e.name, e.data) FROM Entity e").resultList();

编辑:使用带注释的实体,您可以使用 SQL 中不可用的 JPQL 功能,例如路径导航。正确注释的实体可以阐明数据库映射。

实体不需要映射表的所有列,您可以使用任何您喜欢的子集,只要它包含 id。

【讨论】:

它们如何让我的生活更轻松?在我的情况下使用实体而不是 POJO 有什么优势? 因为您可以将 JPQL 与带注释的实体一起使用,因此可以使用路径导航。

以上是关于如果仅从数据库获取数据,我是不是需要实体?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取数据列表,特定日期仅从每个日期获取 6 条记录而不是更多

仅从 sequelize 原始查询而不是模型实例中获取 dataValues

如何仅从数据库查询中获取前 4 个结果

仅从 sql server 中的日期数据类型中获取日期 [重复]

如何仅从 ResultSet 中获取第一行

如何在 android 应用程序中仅从服务器获取更新的数据?