Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.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_Database Design - Fatal编程技术网

向现有Hibernate实体添加(外部)关系(标记)

向现有Hibernate实体添加(外部)关系(标记),hibernate,database-design,Hibernate,Database Design,我需要向现有Hibernate实体添加一个新的多对多关系。 我不想触及原始的Hibernate实体bean或其配置。 我要添加的是一个“标记”功能,可以将其视为外部贡献,而不是实体数据本身的一部分 我想要一个只有两列的简单联接表,即实体主键和标记id 我可以使用Hibernate来管理这个表,而不引入包含单个标记映射的新(人工)实体类型吗 还是我被误导了,我真的想拥有这个“关系实体”,以便我以后可以添加属性(如时间戳)?Hibernate背后的想法是能够从给定的起点遍历Java对象树。如果要定义

我需要向现有Hibernate实体添加一个新的多对多关系。 我不想触及原始的Hibernate实体bean或其配置。 我要添加的是一个“标记”功能,可以将其视为外部贡献,而不是实体数据本身的一部分

我想要一个只有两列的简单联接表,即实体主键和标记id

我可以使用Hibernate来管理这个表,而不引入包含单个标记映射的新(人工)实体类型吗


还是我被误导了,我真的想拥有这个“关系实体”,以便我以后可以添加属性(如时间戳)?

Hibernate背后的想法是能够从给定的起点遍历Java对象树。如果要定义从原始对象到标记对象的多对多关系,仍然可以在标记对象上定义它,这样可以正确地获得具有该标记的原始对象的列表

缺点是您将无法查询原始对象的标记列表(这将需要一个注释来反转关系,并需要一个访问器返回一组标记对象的列表)。但是,您将能够检索使用给定标记标记的原始对象的列表

这里有一个例子。。。让我们假设要标记的对象是一个Post。如果是这样,下面的代码将向标记添加多对多关系,以便您可以查找具有特定标记的帖子列表:

@ManyToMany
@JoinTable(
    name = "TAG-POST",
    joinColumns = {@JoinColumn(name = "TAG-ID")},
    inverseJoinColumns = {@JoinColumn(name = "POST-ID")}
)
private Set<Posts> posts = new HashSet<Post>();
@manytomy
@可接合(
name=“TAG-POST”,
joinColumns={@JoinColumn(name=“TAG-ID”)},
inverseJoinColumns={@JoinColumn(name=“POST-ID”)}
)
private Set posts=new HashSet();
通常,您还希望能够查找与帖子相关的所有标记,但可以省略反向映射。如果确实需要反向映射,则需要将类似以下内容添加到Post对象:

@ManyToMany(mappedBy = "tags")
private Set<Tag> tags = new HashSet<Tag>();
@ManyToMany(mappedBy=“tags”)
private Set tags=new HashSet();
现在,您还可以查找与帖子相关的标记

在重新阅读您的帖子(并查看您的评论)之后,我意识到您也对跳过标记实体的创建感兴趣。如果只有标签名,您可以想象,只能使用您描述的表,但您需要稍微改变您的思维方式。您真正描述的是Post及其标记条目之间的一对多关系。在本例中,您需要将post映射到一系列标记记录,这些记录有两列。。。一个POST-ID和一个TAG-NAME。在不改变原始对象的情况下,仍然可以查询表中具有特定标记名的帖子列表或与特定帖子相关的标记名行列表


请注意,这实际上并没有消除实体。。。您将没有标记实体,但必须将多对多查找表创建为多对一关系,这使其本身成为一个实体。但是,这种方法使用的表少了一个。

不能从原始对象转到标记是可以的。标记被视为外部附加组件。我只想知道我是否需要“tag对象”(如果我不需要额外的实体,但仍然使用Hibernate来管理表)。