目前的需求是这样的:
有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中加什么注解,才能在生成表的同时不生成唯一索引?请各位赐教!!!(认为我表述不清楚的可以纠正)

解决方案 »

  1.   

    当然有影响啦!假设A中有两条记录,ID分别为:1和2;B中一条记录,ID为:3。
    这样如果A中的两条记录都需要添加B中的记录,如果A_B表中不存在B_ID的唯一索引的话数据应该为:
    A_ID    B_ID
    ----------------------
    1       3
    2       3但问题是B_ID字段在表创建时会自动在其列加上唯一索引,这样在保存数据的时候抛异常。
      

  2.   

    这是a_b产生的问题,还是需要在b中配置关联
      

  3.   

     A_ID B_ID
    ----------------------
    1 3
    2 3 你这个是一张中间表吗? 
      

  4.   

    大哥,如果你在A中配一对多的话,说明A的ID在B中也是存在的。
    即A中如果有一个ID=1
    B中会一条或多条数据如1,4;1,5;……这才叫一对多 怎么会出来一个中间表
      

  5.   

    多谢楼上几位   搞混了   应该配置成@ManyToMany
      

  6.   

     @OneToMany (cascade = {CascadeType.REFRESH, CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, fetch=FetchType.LAZY)
    加入mappedBy = "",就不会生成中间表了