gpt4 book ai didi

java - 带有遗留映射表的 Hibernate Annotation

转载 作者:行者123 更新时间:2023-11-29 06:17:57 25 4
gpt4 key购买 nike

我正在尝试将数据访问层的一部分转换为 hibernate 状态,但在正确获取集合关联时遇到了一些麻烦。我正在使用 hibernate 注释,并且有两个相关的实体(这里的基本配置正在工作,只是没有连接)。一些名称已被混淆:

Spring 3、Hibernate 3、Java 6、MySQL 5。

容器有一个视频列表。这两个类都通过注释映射到 hibernate 中。

不幸的是,映射表有一个不寻常的架构。它看起来像这样:

container_mapping:
+-----------------+------------------+------+-----+-------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------------+------+-----+-------------------+-------+
| internal_id | int(10) unsigned | NO | PRI | | |
| external_id | varchar(255) | NO | PRI | | |
| mapping_type_id | int(4) unsigned | NO | PRI | | |
| creation_date | timestamp | NO | | CURRENT_TIMESTAMP | |
+-----------------+------------------+------+-----+-------------------+-------+

当mapping_type_id = 2时,internal_id映射到container.id,external_id映射到video.id

通过id拉回的查询:

select * from container c, container_mapping cm, video v where cm.mapping_type_id=2 and c.episode_id = cm.internal_id and cm.external_id = v.id and c.episode_id=?;

我似乎找不到一个很好的例子来让集合与具有特定值的连接字段连接。此时我正捕获救命稻草。 (不完整)版本在这里:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="container_mapping",
joinColumns = @JoinColumn(name="external_id"))
private List<Video> videos = Lists.newArrayList();

有人知道如何继续吗?

最佳答案

您可以尝试以这种方式映射视频集合:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
@JoinTable(name="container_mapping",
joinColumns = @JoinColumn(name="internal_id"),
inverseJoinColumns = @JoinColumn(name="external_id")
@WhereJoinTable(clause="mapping_type_id=2")
private List<Video> videos = Lists.newArrayList();

此映射背后的想法如下:

  1. @JoinTable注解的joinColumns参数用于配置列,该列存储容器id的值。
  2. 存储视频 ID 的列是使用 @JoinTable 注解的 inverseJoinColumns 参数配置的。
  3. @WhereJoinTable 注释可用于限制从连接表中选择的行。子句参数必须使用 SQL 编写。本例中它用于限制mapping_type_id的值,该值必须为2。

关于java - 带有遗留映射表的 Hibernate Annotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5424828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com