Java-如果 ORM(JPA、Hibernate 等)是邪恶的,那么应该使用一些东西

Java-er should use something if ORM (JPA, Hibernate, etc) is evil

我一定对 ORM 和 JDBC(SpringJDBC 等)感到困惑。

有时我喜欢 ORM,因为对我来说它是 SQL 的简化版本。它帮助我处理了我的关系模型。

例如:

场景

这里我有几个型号在class Tourism:

class Hotel {..}

class Schedule { ... List<Hotel> hotels; ...}

class Product {... List<Schedule> schedules; ...}

我的业务逻辑比较复杂;因此,class 级别大于 4,字段太多。

想象一下使用 SQL 进行保存或更新 - 这太疯狂了!

也许我应该在 HTML 部分分开提交产品基本信息和时间表等。

有时候我喜欢SQL,因为它功能强大,效率高。当然,这取决于所使用的数据库类型。

SQL 支持 RECURSIVE QUERY,解决 "TREE" 查询,如 "Area" 等

SQL调试友好。 Error只是错误而不是乱七八糟的错误提示。

它们都在我的项目中。

ORM 使用关系模型,而 SQL 使用复杂的建模,如树、报表等。

但是我觉得在项目中是一团糟(同样的方法使用SQL和JPA)。

而且 JPA 有时要么不工作要么很麻烦。所以我觉得SQL比较好。

我的断言错了?还有别的办法吗?

如果SQL更好,那么如何处理DAO中的复杂关系,

比如下面的?

INSERT INTO a      (id, name) VALUES (1000,'a');
INSERT INTO a_b    (id, a,name) VALUES (10, 1000, 'b1'), (20, 1000, 'b2');
INSERT INTO a_b_c  (id, a, b, name) VALUES (1, 1000, 10, 'c1'), (2,1000, 20, 'c2');

我为我的英语道歉。到目前为止,我希望你能理解我。 :)

您可以在同一数据访问层中使用 both JPA (e.g. Hibernate) and SQL (e.g. jOOQ)

  1. Hibernate 允许您在 add/remove 实体属性时动态更新所有 DML 语句。实体图模型便于写操作和concurrency control mechanisms allow you to prevent lost updates.

  2. SQL(通常)和 jOOQ(特别是)是强制性的,以充分利用您当前的底层数据库。 SQL 确实很强大,仅仅因为你使用的是 ORM 工具,并不意味着你不必使用本机查询。对于需要 window functionscommon table expressionsderived table expressions 的读取操作和数据投影,您应该使用 SQL.