1.将所有的关联关系设计成manytoone形式。
在学习数据库的时候,接触过的关联关系有:多对一(一对多)、一对一;在RDB里,并没有多对多的关系,这些都是些常理。
将所有关联关系设计成manytoone,当然会遇到一些问题。
(讨论内容的均通过注解实现,配置文件方式请参照hibernate相关文档)
一对一:关系的维护交由一方维护(比如A)。在维护方(A)对被维护方(B)引用的get方法(getB())上加上:
@ManyToOne @JoinColumn(nullable=false,unique=true)
注解达到onetoone的效果,如果需要双向关联,则在被维护方(B)对维护方(A)引用的get方法()上加上:
@OneToOne(mappedBy="a")
mappedBy="a"表示关系维护交由A。
多对多:当然可以对两个model通过多对多的设置来达到需求,hibernate自然也会为我们创建中间表(通过配置,甚至可以在中间表中插入其它字段),不过,增加一个model的形式是让我更感便利的方式。这样做的时候当然会遇到一些新的问题(所幸,这些问题并非不容易解决,下面的描述将有助于解决这些问题)。
2.逻辑主键替代业务主键
在多对多拆分成两个多对一关系时,拆分出来的中间model必然会面对多个字段组合唯一约束性的问题,这个时候,有两个方案可供选择,一种是通过联合主键的方式实现(如果这样,我们又要多写一个生成主键的类了),这样,还是业务主键;另一种,还是以id作为逻辑主键,通过在model配置
@Table(uniqueConstraints= @UniqueConstraint( name="param1_param2", columnNames={"param1", "param2"} ) )
来对多个字段(这里是param1和param2两个字段)的唯一性进行约束。
暂时停中。。。。
没什么经验...