Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当扩展类仅包含嵌入的集合时,Hibernate忽略表_Hibernate_Inheritance_Collections_Hashmap_Joined Subclass - Fatal编程技术网

当扩展类仅包含嵌入的集合时,Hibernate忽略表

当扩展类仅包含嵌入的集合时,Hibernate忽略表,hibernate,inheritance,collections,hashmap,joined-subclass,Hibernate,Inheritance,Collections,Hashmap,Joined Subclass,我目前正在使用继承策略InheritanceType.JOINED。我的扩展类只包含一个String类型的映射,它存储在自己的表中。我想知道是否有可能省略仅包含id的扩展类的表 请让我知道,如果没有直接选项“省略”表格,您将如何对其进行不同的建模 该示例显示,我有一个基类“Attribute”,它由一个类“StringMapAttribute”扩展。这个extendend类只包含一个集合。“StringMapAttribute”的表最后只包含“id”,这是“设计开销”,因此我可以使用inheri

我目前正在使用继承策略InheritanceType.JOINED。我的扩展类只包含一个String类型的映射,它存储在自己的表中。我想知道是否有可能省略仅包含id的扩展类的表

请让我知道,如果没有直接选项“省略”表格,您将如何对其进行不同的建模

该示例显示,我有一个基类“Attribute”,它由一个类“StringMapAttribute”扩展。这个extendend类只包含一个集合。“StringMapAttribute”的表最后只包含“id”,这是“设计开销”,因此我可以使用inheritace并为不同的属性类型建模。因此,仅具有一个id列的表并不理想

// Base class
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="TYPE", discriminatorType=DiscriminatorType.STRING)
public abstract class Attribute<T> implements Serializable {
  @Id
  @GeneratedValue
  private int id;
  private String name;
  ...
}

// Extended class with embedded map 
@Entity
@Table(name="attribute_string") --> I like not to keep that table
@DiscriminatorValue("STRING")
public class StringMapAttribute extends Attribute<Map<String,String>> {

  @ElementCollection
  @CollectionTable(name= "attribute_string_language",   joinColumns = @JoinColumn(name = "attribute_id")
  )
  @MapKeyColumn(name="language")
  @Column(name = "value")
  private Map<String, String> value = new HashMap<String, String>();
}
//基类
@实体
@继承(策略=InheritanceType.JOINED)
@鉴别器列(name=“TYPE”,discriminatorType=discriminatorType.STRING)
公共抽象类属性实现可序列化{
@身份证
@生成值
私有int-id;
私有字符串名称;
...
}
//嵌入映射的扩展类
@实体
@Table(name=“attribute_string”)-->我不想保留该表
@鉴别器值(“字符串”)
公共类StringMapAttribute扩展属性{
@元素集合
@CollectionTable(name=“attribute\u string\u language”,joinColumns=@JoinColumn(name=“attribute\u id”)
)
@MapKeyColumn(name=“language”)
@列(name=“value”)
私有映射值=新HashMap();
}
谢谢你提供的任何有用的提示

是的,来自“DuncanKinnear”的评论是正确的,所以我切换到单表策略


是的,但是联接策略的缺点是,对于每个类和StringMapAttribute类,必须有一个单独的表,这是没有意义的,因为表中没有列(除了ID)。你需要考虑使用单表策略。现代关系数据库可以像存储一堆单独的表一样高效地存储稀疏列表(许多空列),并且不会因为必须将表连接在一起而影响性能邓肯金纳

是的,来自“DuncanKinnear”的评论是正确的,所以我切换到单表策略


是的,但是联接策略的缺点是,对于每个类和StringMapAttribute类,必须有一个单独的表,这是没有意义的,因为表中没有列(除了ID)。你需要考虑使用单表策略。现代关系数据库可以像存储一堆单独的表一样高效地存储稀疏列表(许多空列),并且不会因为必须将表连接在一起而影响性能邓肯金纳


那么,为什么您决定使用
JOINED
策略而不是
SINGLE_表
?您是否有其他具有更多字段的
属性
子类?是的,我的应用程序应该允许存储不同类型的用户定义字段,但
联接
策略的缺点是,您必须为每个类都有一个单独的表,对于
StringMapAttribute
类,该属性没有意义,因为表中没有列(除了ID)。你需要考虑使用<代码>单子表> /代码>策略。现代关系数据库可以像存储一堆单独的表一样高效地存储稀疏列表(许多空列),并且不会因为必须将这些表连接在一起而影响性能。谢谢,我切换到单表策略,那么为什么您决定使用
JOINED
策略而不是
Single_表
?您是否有其他具有更多字段的
属性
子类?是的,我的应用程序应该允许存储不同类型的用户定义字段,但
联接
策略的缺点是,您必须为每个类都有一个单独的表,对于
StringMapAttribute
类,该属性没有意义,因为表中没有列(除了ID)。你需要考虑使用<代码>单子表> /代码>策略。现代关系数据库可以像存储一堆单独的表一样高效地存储稀疏列表(许多空列),并且不会因为必须将这些表连接在一起而影响性能。谢谢,我切换到单表策略,那么为什么您决定使用
JOINED
策略而不是
Single_表
?您是否有其他具有更多字段的
属性
子类?是的,我的应用程序应该允许存储不同类型的用户定义字段,但
联接
策略的缺点是,您必须为每个类都有一个单独的表,对于
StringMapAttribute
类,该属性没有意义,因为表中没有列(除了ID)。你需要考虑使用<代码>单子表> /代码>策略。现代关系数据库可以像存储一堆单独的表一样高效地存储稀疏列表(许多空列),并且不会因为必须将表连接在一起而影响性能。谢谢,我切换到了单表策略。您似乎在说,对您的问题的评论解决了您的问题。为了让未来的访问者更清楚,你能将评论中的相关信息添加到这个答案中吗?你似乎在说,对你的问题的评论解决了你的问题。为了让未来的访问者更清楚,你能将评论中的相关信息添加到这个答案中吗?你似乎在说,对你的问题的评论解决了你的问题。为了让未来的访问者更清楚,你能把评论中的相关信息添加到这个答案中吗?