ORM继承和装饰器支持(Hibernate?)



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

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

  2. 对decorator表的支持:我们的一些类需要能够针对特定对象存储任何(用户提供的)属性,目前这只是一个将ItemId与包含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
  1. JPA(以及Hibernate)支持继承
  2. 我不太明白你的意思
  3. 默认情况下,JPA/Hibernate在事务期间将对象留在内存中。每个事务都有自己的对象副本,并且在每个事务开始时重新创建这个一级缓存,因为任何其他并发事务(甚至其他应用程序)都可能修改了对象。Java中没有析构函数,所以我不明白你的意思。但在事务结束时,默认情况下,对实体的每一次更改都会自动保存到数据库中
  4. 如果您阅读了文档并花时间了解它是如何工作的,那么JPA/Hibernate相对容易使用。但它有学习曲线。只要你了解ORM在幕后的作用,95%的典型用例的性能都是可以的

最新更新