0

在工作中,我一直在使用我们的内部 ORM(2000 年之前),我们正在考虑为我们的 java 迁移到另一个 ORM 解决方案,但是有一些特定的要求。有谁知道支持这些请求的任何形式或 ORM?

  1. 支持继承:在我们的java中,我们有一个相当深的继承结构,目前如果我在“顶部”向一个类添加一个属性,那么我必须手动编辑ORM过程(在SQL中)为每个类添加新类子类

  2. 支持装饰器表:我们的一些类需要能够存储针对特定对象的任何(用户提供的)属性,目前这只是一个将 Item Id 匹配到包含 FieldName 和 FieldValue 的行的表,我们提取所有这些作为属性。请参阅下文以获得更好的解释。

  3. 内置对象持久性,因此对象仅在请求时才加载和写入数据库,否则留在内存中。如果您完成后可以自动保存任何更改,而不必打电话.save()(尽管有潜在危险?)

  4. 像往常一样,易于使用(最好 - 这不是我们都想要的吗?)和良好的性能

感谢您抽出宝贵时间,很高兴用我们选择的内容、原因以及我们在实施过程中发现的一些提示来更新问题!


#2的进一步解释:

(请不要问为什么一定要这样,改变它是这个项目的“超出范围”)

物品表:

ItemId | Type  | Price
-------|-------|-------
1      | Mouse | 9.99
2      | Dog   | 12.99

装饰表:

ItemId | FieldName | Value
-------|-----------|-------
1      | Age       | 12
2      | Breed     | Blue Long Hair
2      | Name      | Fluffy 

物品对象:

Item1
  ItemId -> 1
  Type -> Mouse
  Price -> 9.99
  Age -> 12

Item2
  ItemId -> 2
  Type -> Dog
  Price -> 12.99
  Breed -> Blue Long Hair
  Name -> Fluffy
4

1 回答 1

0
  1. JPA(以及 Hibernate)支持继承。
  2. 我不太明白你的意思
  3. 默认情况下,JPA/Hibernate 在事务期间将对象留在内存中。每个事务都有自己的对象副本,并且在每个事务开始时重新创建此一级缓存,因为任何其他并发事务(甚至另一个应用程序)都可能修改了对象。Java中没有析构函数,所以我不明白你的意思。但是在事务结束时,默认情况下,对实体的每次更改都会自动保存到数据库中。
  4. 如果您阅读文档并花时间了解它的工作原理,那么 JPA/Hibernate 相对容易使用。但它有它的学习曲线。在 95% 的典型用例中性能是可以的,只要你了解 ORM 在幕后做了什么。
于 2012-09-04T09:54:43.957 回答