アソシエーションマッピングアノテーションの休止状態アノテーション開発

レビュー

休止状態の注釈の開発およびその他のレベルの注釈

属性レベルの注釈の休止状態の注釈の開発

1.1対1の単一の外部キーの関連付け

Student04

@Entity
public class Students04 implements Serializable {

    @Id //设置为主键
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int sid;
    @OneToOne(cascade = CascadeType.ALL)//指定被控类, 默认是全级联
    @JoinColumn(name = "pid", unique = true)//name指定被控类(IdCard类)的主键, unique说明该键是唯一的
    private IdCard card;
    private String gender; //性别
    private Date birthday; //出生日期
    private String major; //专业  ... 构造方法和settergetter方法自行补充 ...}

IDカード

@Entity
public class IdCard {

    @Id
    @GeneratedValue(generator = "pid")
    @GenericGenerator(name = "pid", strategy = "assigned")
    @Column(length = 18)
    private String pid;  //身份证号码
    private String sname;  //学生姓名  ... 构造方法和settergetter方法自行补充 ...}

構成ファイル

<mapping class="com.idea.hibernate.oto_fk.Students04"/>
<mapping class="com.idea.hibernate.oto_fk.IdCard"/>

テスト(メインテーブルオブジェクトを保存する前に、外部キーオブジェクトを保存する必要があります)

@Test
public void addStudents04(){
    Configuration configuration = new Configuration().configure();
    SessionFactory sessionFactory = createSessionFactory(configuration);
    Session session = sessionFactory.getCurrentSession();
    Transaction tx = session.beginTransaction();
    IdCard card = new IdCard("1234567890123456", "王五");
    Students04 students04 = new Students04(card, "男", new Date(), "Java开发");
    session.save(card);
    session.save(students04);
    tx.commit();
}

/**
 * 建表策略
 */
private SessionFactory createSessionFactory(Configuration configuration){
    //创建服务注册对象
    StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
    //生成SssionFactory
    SessionFactory  sessionFactory = configuration.buildSessionFactory(serviceRegistry);
    //返回配置对象
    return sessionFactory;
}

ps:同じエンティティクラスの注釈は、属性に書き込むか、getXxxメソッドに書き込む必要があり、混在させることはできません。 

2.1対1の双方向外部キーの関連付け

特徴:私はあなたの中にいます、あなたは私の中にいます

マスターパーティの記述は、1対1の一方向の関連付けと同じですが、違いは、被告側(IdCard)が

双方向の関連付けの場合、mappedBy属性を設定し、制御するマスターに渡す必要があります。

IdCard02

@Entity
public class IdCard02 {

    @Id
    @GeneratedValue(generator = "pid")
    @GenericGenerator(name = "pid", strategy = "assigned")
    @Column(length = 18)
    private String pid;  //身份证号码
    private String sname;  //学生姓名
    @OneToOne(mappedBy = "card")  //指定主控方(Students05)中的属性
    private Students05 students05;  ... 构造方法和settergetter方法自行补充 ...}

他の部分は同じです。 

3.1対1の双方向外部キーユニオンプライマリキー

①プライマリキークラスStudentsPKを作成する

②プライマリキークラスの注釈@Embeddable

@Embeddable
パブリッククラスStudentsPKはSerializableを実装します{ 

    privatestatic final long serialVersionUID = 6632444697825110476L; 
    @Column(length = 18)
    プライベート文字列ID; //身份证号
    @Column(length = 8)
    private String sid; //学号...}

③エンティティクラスにプライマリキークラスの属性を導入し、属性に注釈@EmbeddedIdを使用します

Hibernateアノテーション開発の属性レベルのアノテーションに詳細に移動します

4.1対多の単一の外部キーの関連付け

1つのパーティーは、複数の学生が参加するクラス(1対多)など、多くのパーティーのコレクションを開催します

Student07

@Entity
public class Students07 implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int sid;
    private String sname;
    private String gender;
    private String major;
    private Date birthday; ...}

 ClassRoom01

@Entity
public class ClassRoom01 {

    @Id
    @GeneratedValue(generator = "cid")
    @GenericGenerator(name = "cid", strategy = "assigned")
    @Column(length = 4)
    private String cid;
    private String cname;
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)  //多的一方使用急加载, 一的一方使用懒加载
    @JoinColumn(name = "CID")
    private Set<Students07> stus;  //一的一方持有多的一方的集合  ...}

5.1対多の双方向外部キーアソシエーション

クラスクラスの構成は、クラスクラス参照が学生クラスに追加されることを除いて、一方向構成と同じです。

Student08

@Entity
public class Students08 implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int sid;
    private String sname;
    private String gender;
    private String major;
    private Date birthday;
    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)  //多的一方需要设为急加载
    @JoinColumn(name = "CID")
    private ClassRoom02 classRoom02;  //多的一方持有一的一方的引用  ...}

6.多対多の単一の外部キーアソシエーション

①学生と教師の対応する関係は多対多の関係です 

②学生テーブルには教師テーブルのコレクションがあります

③中間テーブルを作成する

Student09

@Entity
public class Students09 implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int sid;
    private String sname;
    private String gender;
    private String major;
    private Date birthday;
    @ManyToMany
    @JoinTable(
            name = "teachers_students",  //中间表的名称
            joinColumns = {@JoinColumn(name = "SID")},  //中间表外键关联字段的名称
            inverseJoinColumns = {@JoinColumn(name = "TID")}  //中间表外键关联字段的名称
    )
    private Set<Teachers> teachers;  //学生持有教师的集合  ...}

教師

@Entity
public class Teachers {

    @Id
    @GeneratedValue(generator = "tid")
    @GenericGenerator(name = "tid", strategy = "assigned")
    @Column(length = 4)
    private String tid;  //教师的编号
    private String tname;  //教师的姓名 ...}

7.多対多の双方向外部キーアソシエーション

両当事者は、マスターと被告人を含む互いのコレクションを保持しており、マスターに制御を移す必要があります

@Entity
public class Teachers01 {

    @Id
    @GeneratedValue(generator = "tid")
    @GenericGenerator(name = "tid", strategy = "assigned")
    @Column(length = 4)
    private String tid;  //教师的编号
    private String tname;  //教师的姓名
    @ManyToMany(mappedBy = "teachers")  //将主控权给学生方, teachers是学生类中的属性
    private Set<Students10> stus;   ...}

学生クラスはテストと同じです

おすすめ

転載: blog.csdn.net/ip_JL/article/details/85775517