Jakarta ee Java ORM POJO设计模式问题

Jakarta ee Java ORM POJO设计模式问题,jakarta-ee,Jakarta Ee,我有一个普遍的问题,目前我还没有看到任何ORM能解决这个问题, 我在数据库中有一个实体,其中的字段由于性能问题而不想从数据库中加载, 现在如果我没有在SQL查询中加载它们,那么它们会得到一个默认值(NULL), 有人可以使用此属性并导致错误, 如果我为该结果集创建一个新的POJO,代码将包含大量无法重用的“浪费”POJO 我已经考虑过延迟初始化,但如果我阅读了POJO的列表,会发生什么呢 对于每个元素,我尝试使用未初始化字段一次,这将导致大量数据库连接和时间负载 解决这个问题的最佳设计模式是什么

我有一个普遍的问题,目前我还没有看到任何ORM能解决这个问题, 我在数据库中有一个实体,其中的字段由于性能问题而不想从数据库中加载, 现在如果我没有在SQL查询中加载它们,那么它们会得到一个默认值(NULL), 有人可以使用此属性并导致错误, 如果我为该结果集创建一个新的POJO,代码将包含大量无法重用的“浪费”POJO

我已经考虑过延迟初始化,但如果我阅读了POJO的列表,会发生什么呢 对于每个元素,我尝试使用未初始化字段一次,这将导致大量数据库连接和时间负载

解决这个问题的最佳设计模式是什么


谢谢

Hibernate允许将任何属性设置为“lazy”。然后它将根据需要插入类字节码以加载这些字段。正如你所注意到的,这可能相当昂贵

一种解决方案是将对象分成两个类A和B,其中B扩展了A。对于简单的任务,您告诉框架加载A(只有几个字段)。然后选择所有需要的元素,并使用ID加载B。由于您使用主键,因此速度非常快。但是您将有一个开销,即A中的字段将被加载两次

另一种解决方案是使用HQL加载所需的属性。如果您在HQL中提到一个列,那么不管lazy选项说什么,它都将被加载。但您将得到一个新的对象列表,其中仅设置了这些属性。这意味着您必须手动合并

结论:没有简单、现成的解决方案可以让每个人都感到快乐。这是因为Java没有DB(您不能在RAM中对对象模型运行selects),在管理行时,DB的工作方式与Java完全不同。这种分裂是无法解决的,所有的地图绘制者都会受到它的影响

在这方面,对象数据库稍微好一点,但它们需要黑客来搜索对象(比如“列表中所有名为‘John’的元素”)

NoSQL DBs没有问题,因为每一行都是“key:value”,您必须通过以一种有用的方式构建“key”来模拟“column”的概念(比如“User:1:name”,它是ID为1的
User
实例的名称)。在这里,连接值很难

问:为什么我们有多个数据库?
因为他们都很烂。
--A.迪古拉