JPA 单向一对多关联 中间表生成唯一索引问题

千骑卷平冈 2010-05-23 11:54:37
目前的需求是这样的:
有A、B两个实体,A对B形成一对多的关联关系,目前我只需要配置单向一对多关联,即只在A中配置一对多,B中不做任何配置,具体如下:

public class A implements Serializable {
private static final long serialVersionUID = -1317006094950982121L;
//其余属性及get、set方法省略
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@OneToMany (cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
private List<B> b = new ArrayList<B>();
}

public class B implements Serializable {
private static final long serialVersionUID = -1317006094950982121L;
//其余属性及get、set方法省略
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
//注:A中单向一对多配置,B中不配置A属性
}



如果像上述配置的话,因为未在B中进行关联配置,这样会生成一个中间表A_B来维护关联关系,A_B中除了已生成必要的外键索引外,还对B_ID字段生成了一个唯一索引,这是不应该的,因为A_B中肯定会有重复记录。

请问:通过A中加什么注解,才能在生成表的同时不生成唯一索引?请各位赐教!!!(认为我表述不清楚的可以纠正)
...全文
634 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyl20032005 2011-09-27
  • 打赏
  • 举报
回复
@OneToMany (cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
加入mappedBy = "",就不会生成中间表了
千骑卷平冈 2010-05-27
  • 打赏
  • 举报
回复
多谢楼上几位 搞混了 应该配置成@ManyToMany
colin_pxx 2010-05-25
  • 打赏
  • 举报
回复
大哥,如果你在A中配一对多的话,说明A的ID在B中也是存在的。
即A中如果有一个ID=1
B中会一条或多条数据如1,4;1,5;……这才叫一对多 怎么会出来一个中间表
zz250121244 2010-05-24
  • 打赏
  • 举报
回复
A_ID B_ID
----------------------
1 3
2 3

你这个是一张中间表吗?
  • 打赏
  • 举报
回复
这是a_b产生的问题,还是需要在b中配置关联。。。
千骑卷平冈 2010-05-23
  • 打赏
  • 举报
回复
当然有影响啦!假设A中有两条记录,ID分别为:1和2;B中一条记录,ID为:3。
这样如果A中的两条记录都需要添加B中的记录,如果A_B表中不存在B_ID的唯一索引的话数据应该为:
A_ID B_ID
----------------------
1 3
2 3

但问题是B_ID字段在表创建时会自动在其列加上唯一索引,这样在保存数据的时候抛异常。
minhw 2010-05-23
  • 打赏
  • 举报
回复
对阿

有索引 难道不可以吗
zz250121244 2010-05-23
  • 打赏
  • 举报
回复
有索引难道对你的业务有影响?
piaolankeke 2010-05-23
  • 打赏
  • 举报
回复
去除"@Id"不行么?

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧