冬眠多态性
这是一个Hibnerate多态性问题和一个数据模型设计问题;它们是交织在一起的。我过去使用过Hibernate,并且喜欢它,但有时我发现除了琐碎的设计之外,很难考虑任何事情。不是对冬眠的敲门声;只是一个观察,ORM总体上可能具有挑战性。
我认为这是一个Hibernate 101问题,但我不确定。我试图实现的目标甚至可能是不可能的。
我有一个抽象类水果,将被子类为苹果和橙子。我有一个Note类,表示有关Apples和Oranges的注释或注释。一个苹果或橙子可以有许多与之关联的Notes,但只有一个Apple或Orange会与给定的Note相关联。
以下是这些类的草图,我现在省略了对象id的位置,以及将它们与橙子区分开来的Apples的属性。目前,我对使用哪种Hibernate继承策略没有强烈的感觉。
abstract public class Fruit {
}
// Apples have notes written about them:
public class Apple extends Fruit {
   private Set<Note> note;
   ...
   @OneToMany(cascade = CascadeType.ALL)
   public Set<Note> getNote() {
       return note;
   }
}
// Oranges have notes written about them:
public class Orange extends Fruit {
   private Set<Note> note;
   ...
   @OneToMany(cascade = CascadeType.ALL)
   public Set<Note> getNote() {
       return note;
   }
}
下面是当前实现的 Note 类,其中我们看到它具有 Apple 和 Orange 的字段。这种设计的缺陷或不优雅之处在于,单个笔记实例只会指向Apple或Orange之一,而永远不会同时指向两者。因此,如果将Note绑定到Apple上,则橙色字段是多余的,不雅观的,反之亦然。
// A note about an Apple or Orange
public class Note {
   private String theNote;
   private Apple apple; 
   private Orange orange;
   ...
   // with the usual many to one mapping
   @ManyToOne
   @JoinColumn(name = "apple_id")
   public Apple getApple() { 
       return apple;
   }
   // with the usual many to one mapping
   @ManyToOne
   @JoinColumn(name = "orange_id")
   public Orange getOrange() {
       return orange;
   }
   ...
}
但是,这是我认为我想要基于我的设计基础的Note类,但我不确定如何考虑Hibernate注释和表映射:
// A note about a fruit:
public class Note {
   private String theNote;
   private Fruit fruit;
   ...
}
因此,水果将是苹果或橙子的实例。
后一个Note类,它引用了水果,实际上将容纳一个苹果或橙子,甚至可以与Hibernate ORM映射相协调吗?如果是,有人可以谈谈如何。
 
					 
				 
				    		 
				    		 
				    		