如何在Hibernate中将两个类映射到一个DB表
我正在学习Hinbernate,因此,如果我能将两个类映射到一个DB表中,我就会产生这样的想法 例: 然而,这两个类都映射到一个表,比如说,按名称Employee,其中一列为String数据类型 Hibernate将能够基于我用于创建的类在表中创建行。 或者你认为应该有一个鉴别器列来区分不同的类如何在Hibernate中将两个类映射到一个DB表,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我正在学习Hinbernate,因此,如果我能将两个类映射到一个DB表中,我就会产生这样的想法 例: 然而,这两个类都映射到一个表,比如说,按名称Employee,其中一列为String数据类型 Hibernate将能够基于我用于创建的类在表中创建行。 或者你认为应该有一个鉴别器列来区分不同的类 注意:类之间没有继承关系,它们是独立的。好吧,请考虑数据库模式,而不是对象模型。任何人(无论是您还是Hibernate)如果从您的表中得到一条记录,如何知道它实际上是哪个实体 您需要引入一些类层次结构,
注意:类之间没有继承关系,它们是独立的。好吧,请考虑数据库模式,而不是对象模型。任何人(无论是您还是Hibernate)如果从您的表中得到一条记录,如何知道它实际上是哪个实体
您需要引入一些类层次结构,并通过添加一个鉴别器列来使用继承来指定类型,或者将这些实体映射到不同的表中。好的,请根据数据库模式而不是对象模型来考虑。任何人(无论是您还是Hibernate)如果从您的表中得到一条记录,如何知道它实际上是哪个实体
您需要引入一些类层次结构并通过添加鉴别器列来使用继承来指定类型,或者将这些实体映射到不同的表中。使用xml映射文件时,您只需创建两个映射文件Developer.hbm.xml和Manager.hbm.xml,这两个文件都引用同一数据库表。这很有效 问题是,您必须确保表行仅作为开发人员或管理人员加载,而不是作为两者加载。例如,如果您使用
session.createQuery(“来自开发人员”)
和session.createQuery(“来自管理器”)
加载它们,那么您在会话缓存中有两次相同的行。如果先修改并更新Developer,然后在Manager中修改并更新同一行,则Developer中的修改将丢失,并且会话缓存不一致
因此,鉴别器行不是绝对必要的,但强烈建议使用。使用xml映射文件时,只需创建两个映射文件Developer.hbm.xml和Manager.hbm.xml,这两个文件都引用相同的数据库表。这很有效 问题是,您必须确保表行仅作为开发人员或管理人员加载,而不是作为两者加载。例如,如果您使用
session.createQuery(“来自开发人员”)
和session.createQuery(“来自管理器”)
加载它们,那么您在会话缓存中有两次相同的行。如果先修改并更新Developer,然后在Manager中修改并更新同一行,则Developer中的修改将丢失,并且会话缓存不一致
因此,鉴别器行不是绝对必要的,但强烈建议使用。哦,这样做是可能的。尽管存在数据不一致等问题……是的。您可以避免这些与程序逻辑不一致的情况。然而,在大多数情况下,这是糟糕的数据库设计。哦,这样做是可能的。尽管存在数据不一致等问题……是的。您可以避免这些与程序逻辑不一致的情况。然而,在大多数情况下,这是糟糕的数据库设计。
Class Developer {
String name;
}
Class Manager {
String name;
}