JPA 中如何设置唯一索引

子木007 发布于 2011/08/31 10:27
阅读 8K+
收藏 0

JPA 中设置唯一索引的方式:

@Table(name = "table", uniqueConstraints = {
      @UniqueConstraint(columnNames = {"column1", "column2 ", "column3"})
})
我现在遇到的情况是这样的, 以上面的注释为例, column3是一个通过
@ManyToOne 
@JoinColumn(name="column3")
自动生成的关联ID,实体Bean中没有对应的 column3 字段,  所以启动过程会报错,提示的错误就是因为没有column3字段。
请问,这种情况如何设置?

加载中
0
weir2008
weir2008
那这个应该是没有 column3这个实体引起的,首先 column3要存在了才能关联。
子木007
子木007
这种情况,就放弃这个索引么? 有其他办法么?
0
weir2008
weir2008
因为有 @ManyToOne 就说明 column3 是一个实体,也就是说 column3 不存在何来 @ManyToOne,那又何来 唯一索引。
0
大东哥
大东哥

你这个约束有矛盾,@ManyToOne,多对一的情况,你又是用@JoinColumn关联的,本来就不能约束唯一。

@JoinColumn(unique=true)。这样就变成一对一了,或者@OneToOne,将前面的@Table的column3去掉。

如果是要多对一,你这个唯一约束就是矛盾的,出错正常。

0
子木007
子木007

惭愧啊, 恕我愚钝,  还是没太理解。 

@ManyToOne

 @JoinColumn(name="column3")   

1. 说明 many 这边的表(假设表名ManyTable )中用 column3 字段作为与One(假设表名OneTable)一边的关联。  如果不指定他会自动生成一个类似 one_id 的字段。 对不?

2.  表ManyTable 对应的实体Bean 中不需要额外的字段“column3” 。  对不? 

3.  我知道 column3 在ManyTable表中肯定不能有唯一约束,  但是我想要的是 ManyTable表中的其他2个字段 column1 + column2 和 column3 一起作为唯一约束。 这个约束放到实际的关系表中没有矛盾吧?   

JPA 怎么能做到,或者没有必要? 或者我的理解还是有问题?

 

望请各位 不吝赐教 !!  

大东哥
大东哥
把你的具体映射贴出来吧,才好判断。
返回顶部
顶部