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)。
Hibernate 允许您在 add/remove 实体属性时动态更新所有 DML 语句。实体图模型便于写操作和concurrency control mechanisms allow you to prevent lost updates.
SQL(通常)和 jOOQ(特别是)是强制性的,以充分利用您当前的底层数据库。 SQL 确实很强大,仅仅因为你使用的是 ORM 工具,并不意味着你不必使用本机查询。对于需要 window functions、common table expressions、derived table expressions 的读取操作和数据投影,您应该使用 SQL.
我一定对 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)。
Hibernate 允许您在 add/remove 实体属性时动态更新所有 DML 语句。实体图模型便于写操作和concurrency control mechanisms allow you to prevent lost updates.
SQL(通常)和 jOOQ(特别是)是强制性的,以充分利用您当前的底层数据库。 SQL 确实很强大,仅仅因为你使用的是 ORM 工具,并不意味着你不必使用本机查询。对于需要 window functions、common table expressions、derived table expressions 的读取操作和数据投影,您应该使用 SQL.