Java 休眠-让它映射
我有以下db模型: 我有几个Java 休眠-让它映射,java,database,hibernate,Java,Database,Hibernate,我有以下db模型: 我有几个int、double、string和date的子类型,它们的抽象父类型为templateValue。它们都有共同的valueType。每个TemplateValueMap都有一个TemplateValue。此外,每个TemplateValueMap都有一个TemplateItem。该templateItem有一个valueType,它是TemplateValue的valueTypes之一。如果valueType存在,则创建一个表。如果不是,则不创建表 我的课程是这样
int
、double
、string
和date
的子类型,它们的抽象父类型为templateValue
。它们都有共同的valueType
。每个TemplateValueMap
都有一个TemplateValue
。此外,每个TemplateValueMap
都有一个TemplateItem
。该templateItem
有一个valueType
,它是TemplateValue
的valueTypes
之一。如果valueType
存在,则创建一个表。如果不是,则不创建表
我的课程是这样的:
@Entity
@DiscriminatorColumn(name="valueType")
public abstract class TemplateValue implements Serializable{
@Id
@GeneratedValue
private Long id;
@NotNull
@Size(min=1, max=32)
private int valueType;
该类有几个child-like(对于其他所有类,如TemplateValueDate/Int/Double
etc.,它们看起来都一样):
我的TemplateValueMap
目前看起来是这样的:
@Entity
public class TemplateValueMap implements Serializable{
@Id
@GeneratedValue
private Long id;
@OneToOne
private TemplateValue tempValue;
@OneToOne
private TemplateItems tempItem;
我的TemplateValueItem
如下所示:
@Entity
@DiscriminatorColumn(name="valueType")
public abstract class TemplateValue implements Serializable{
@Id
@GeneratedValue
private Long id;
@NotNull
@Size(min=1, max=32)
private int valueType;
@实体
公共类TemplateItems实现可序列化{
@Id
@GeneratedValue
private Long id;
@OneToOne
private TemplateValue tempValue;
private String label;
private String valueType;
private String displayType;
我的问题是如何告诉hibernate它应该决定是否使用一个valueType
来创建TemplateValueString/Double/Int
的value
值?该值是因为TemplateValue
中的valueType而创建的,并且在TemplateItems
我真的很感激你的回答
更新
我不明白问题是什么。Hibernate映射现有的表。它不会创建新表。为什么会这样?@JBNizet Thx非常感谢您的回答!我重新制定了我的问题。请看我的问题!除了您的OneTONE双向关联没有正确映射之外(其中一个边必须具有mappedBy属性),一切看起来都很好,它将开箱即用。什么不起作用?Hibernate将在加载行时使用鉴别器值来实例化相应的子类。插入新行时,您的责任是创建相应子类的实例并将其保存。@JBNizet thx获取您的答案!我阅读了有关conc的内容
联合子类的ept
。您认为在这种设置中使用该概念有意义吗,因为我认为模板项
将不会正确映射为模板值
的正确值?顺便问一下,您有这样一个持久化方法的示例吗?如果我理解正确,您可以nt以确保TemplateValue中valueType的值与TemplateItem中valueType的值匹配。这是Hibernate无法帮助您实现的功能要求。您有责任避免将字符串模板值附加到日期模板项。既然所有内容都与OneToOne关联相链接,为什么要重复在两个不同的地方应用这些信息?