【发布时间】:2011-07-22 10:37:11
【问题描述】:
我正在尝试将数据访问层的一部分转换为休眠模式,但在正确获取集合关联时遇到了一些麻烦。我正在使用休眠注释,并且有两个相关的实体(这里的基本配置正在工作,而不是连接)。一些名称已被混淆:
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();
有人对如何进行有任何指示吗?
【问题讨论】: