关联关系映射注解 以下项目均在之前相应代码的基础上进行的修改。这些项目均需要做的是: 删除映射文件 在hibernate.cfg.xml中注册实体类 注解的重要位置在实体类中关联属性上。这里是关联关系的体现。
举例:项目annotation_one2many_s @OneToMany表明是一对多关联关系。 @JoinColumn指明该属性所关联的外键。
targetEntity:指明该属性所关联的类。 cascade:指定级联类型。其为数组,使用多种级联,则可使用{ }赋值。其值为Cascade常量:
对于一对多单向关联关系的多方,由于其不具备维护关联关系的能力,即没有一方对象作为属性,所以这里是不用设置关联相关的注解的。
举例:项目annotation_one2many_d 这其中增加了mappedBy属性。
mappedBy属性用法: 该属性与关联关系的维护权相关。 该属性应放在放弃维护权一方。 该属性值为对方的关联属性,表明以后的关联关系将由它来负责。 使用该属性的注解,无需也不能再设置cascade属性。 该属性只可能在双向关联中使用。 使用了该属性,将不能再使用@JoinColumn注解。因为@JoinColumn注解表示其所注解的属性将来通过set方法设值后,会与DB中哪个字段相关联。 mappedBy属性表示当前注解的关联属性放弃了维护权,即使执行了set方法将值设置入,其也不会写入到DB中。 也正因为放弃了维护权,与DB无关了,所以设置了mappedBy属性的注解,再设置cascade也就无意义了。 一个是使被注解者与DB相关,一个是使被注解者放弃与DB的关系,它们是相互矛盾的。
举例:annotation_many2many_s 多对多关联使用@ManyToMany注解。其会自动生成一个中间表,表名为两个关联对象的映射表名的联合:表1_表2。该表包含两个字段,字段名也与表名相关。字段名分别为:表1_id与表2_id。当然,默认的表名与字段名均可通过@JoinTable进行修改(不研究)。
原文链接:https://www.cnblogs.com/wangbin2188/p/9015308.html