![]() |
1
3
我可以想出几种方法来做到这一点。 1.为模拟规范化表结构的集合信息创建视图,并将其作为集合映射到休眠状态:
假设调用了现有表
现在从Hibernate的角度来看,
这种方法的好处是:
缺点:
或者,如果DBA甚至不允许您向数据库添加视图,或者您需要执行更新: 2。使用Hibernate dynamic model mapping facility 将c1、c2、c3属性映射到 Map 还有一些代码 DAO 层在映射和集合属性之间进行适当的对话: 我自己从来没有这样做过,但我相信Hibernate允许您将表映射到哈希映射。我不确定Hibernate是如何动态地允许您这样做的(即,您是否可以不必简单地指定表名,让Hibernate自动映射所有列?)但这是我能想到的另一种方法。 如果采用这种方法,请务必使用 data access object 模式,并确保对客户端代码隐藏内部实现(使用哈希映射)。另外,在写入数据库之前,一定要检查集合的大小是否不超过可用列的数目。 这种方法的好处是:
缺点:
|
![]() |
2
1
就我个人而言,我认为这个设计听起来像是断裂了 first normal form 对于关系数据库。如果需要C101或M101会发生什么?是否再次更改架构?我觉得这很有侵略性。 如果你把冬眠加入到混合物中,情况会更糟。添加C101或M101意味着必须改变Java对象、Hibernate映射、一切。 如果您与C和M表有1:M的关系,那么您可以通过添加其他行来处理我刚才引用的案例。Java对象包含集合& lt;c& gt;或集合& lt;m & gt;您的休眠映射是一对多的,不会更改。 也许是因为你没有看到任何与你的案例相匹配的休眠例子,因为这是一个不推荐的设计。 如果你必须的话,也许你应该看看 Hibernate Component Mapping . 更新:这是遗产的事实被适当地指出。我提出的第一个正常形式的观点是,对于将来可能会发现这个问题的其他人来说,就像对于发布问题的人一样。我不想以这样一种方式回答这个问题:它默默地宣称这个设计是“好的”。 指出Hibernate组件映射是相关的,因为在搜索时,知道要查找的内容的名称可能是关键。Hibernate允许对象模型比它映射的关系模型更细粒度。您可以自由地为非规范化模式建模(例如,将名称和地址对象作为较大的Person对象的一部分)。这就是他们给这种技术起的名字。它也可能有助于找到其他的例子。 |
![]() |
3
1
对不起,如果我误解了你的问题,我对冬眠不太了解。但是,您不能在从数据库中选择的过程中连接以获得您想要的东西吗? 像:
(当然,连接操作符在RDBMS之间是不同的。) |
![]() |
4
1
[编辑]我建议使用
这允许您在Java中处理多个列作为单个对象。 映射如下:
在正常查询期间,Hibernate将一次加载所有列。
在这种情况下,必须将int值从列表复制到
在
[edit2]如果不想键入所有@column注释,请为它们使用代码生成器。这可以像脚本一样简单,脚本提供一个名称和一个数字,然后它将@column(…)打印到system.out。脚本运行后,只需将数据剪切并粘贴到源中即可。
唯一的其他解决方案是访问内部Hibernate API,在运行时构建该信息,但该API是内部的,因此很多东西都是私有的。可以使用Java反射和
|
![]() |
5
0
你可以使用
我用冬眠已经有一段时间了(超过3年),所以我很生锈,但我记得这很容易做到;你的
|
![]() |
Gero Mendy · 如何为一个类分配兵变的结果。查询 1 年前 |
![]() |
Hamvy B · 替换不推荐的hibernate方法 1 年前 |
![]() |
Martin Pfeffer · Spring Boot JPA 1 年前 |
|
denstran · 休眠未生成正确的id 1 年前 |
![]() |
Frank · 忽略/跳过Hibernate架构验证中的特定字段 1 年前 |