zoukankan      html  css  js  c++  java
  • hibernate学习(设计多对多 关系 映射)

    //
    package org.crazy.app.domain;
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.*;
    @Entity
    @Table(name="person_inf")
    public class Person {
        @Id
        @Column(name="person_id")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer id;
        private String name;
        private int age;
        @ManyToMany(targetEntity=Address.class)
        @JoinTable(name="person_address",
        joinColumns=@JoinColumn(name="person_id",referencedColumnName="person_id"),
        inverseJoinColumns=@JoinColumn(name="address_id",referencedColumnName="address_id"))
        private Set<Address> address=new HashSet<Address>();
        
        public Person() {
        
        }
        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }
        //
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        public Set<Address> getAddress() {
            return address;
        }
        public void setAddress(Set<Address> address) {
            this.address = address;
        }
        
        
        
    }
    //**************************************
    package org.crazy.app.domain;
    
    import java.util.HashSet;
    import java.util.Set;
    
    import javax.persistence.*;
    
    @Entity
    @Table(name="address_inf")
    public class Address {
        @Id
        @Column(name="address_id")
        @GeneratedValue(strategy=GenerationType.IDENTITY)
        private Integer addressId;
        private String addressDetail;
        @ManyToMany(targetEntity=Person.class)
        @JoinTable(name="person_address",
        joinColumns=@JoinColumn(name="address_id",referencedColumnName="address_id"),
        inverseJoinColumns=@JoinColumn(name="person_id",referencedColumnName="person_id"))
        private Set<Person> persons=new HashSet<Person>();
        public String getAddressDetail() {
            return addressDetail;
        }
        public void setAddressDetail(String addressDetail) {
            this.addressDetail = addressDetail;
        }
        public Set<Person> getPersons() {
            return persons;
        }
        public void setPersons(Set<Person> persons) {
            this.persons = persons;
        }
        public Address(String addressDetail) {
            this.addressDetail = addressDetail;
        }
        public Address() {
        
        }
        
        
        
    }

    2,测试

            Person p = new Person();
            // 设置Person的name为crazyit
            p.setName("crazyit");
            p.setAge(20);
            // 持久化Person对象(对应于插入主表记录)
            session.save(p);
            // 创建一个瞬态的Address对象
            Address a = new Address("广州天河");
            // 先设置Person和Address之间的关联关系
            a.getPersons().add(p);
            // 再持久化Address对象
            session.persist(a);
            // 创建一个瞬态的Address对象
            Address a2 = new Address("上海虹口");
            // 先设置Person和Address之间的关联关系
            a2.getPersons().add(p);
            // 再持久化Address对象(对应于插入从表记录)
            session.persist(a2);
    
            Person p2 = new Person();
            p2.setName("fkit");
            p2.setAge(29);
            p2.getAddress().add(a2);
            session.save(p2);

  • 相关阅读:
    [C++] 用Xcode来写C++程序[5] 函数的重载与模板
    【转】字符编码详解——彻底理解掌握编码知识,“乱码”不复存在
    【转】无法将notepad++添加到打开方式列表中的解决办法
    【转】关于启用 HTTPS 的一些经验分享
    【转】GPU 与CPU的作用协调,工作流程、GPU整合到CPU得好处
    【转】excel 末尾是0 恢复数据方法
    【转】怎么让VS2015编写的程序在XP中顺利运行
    【转】深入 Docker:容器和镜像
    【转】SSL/TLS协议运行机制的概述
    【转】C++怎么读写windows剪贴板的内容?比如说自动把一个字符串复制.
  • 原文地址:https://www.cnblogs.com/panqingqiang/p/5080385.html
Copyright © 2011-2022 走看看