关联关系-下手-一对一单向外键
关联关系-动手-一对一单向外键
/** * Person类中有一个属性指向另外一个实体,但是另外一个实体没有属性指向Person,所以单向 * 由于Person表中是非主键属性关联,所以外键 * @author Macrotea * */ @Entity public class Person { private int id; private String name; private Address address; @OneToOne @JoinColumn(name = "addressId") public Address getAddress() { return address; } @Id @GeneratedValue public int getId() { return id; } public String getName() { return name; } public void setAddress(Address address) { this.address = address; } public void setId(int id) { this.id = id; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + "]"; } } @Entity public class Address { private int id; private String city; public String getCity() { return city; } @Id @GeneratedValue public int getId() { return id; } public void setCity(String city) { this.city = city; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Address [city=" + city + ", id=" + id + "]"; } } public class Test { private static void prepare_data() { Session session = HibernateSessionFactory.getSession(); Transaction transaction = session.beginTransaction(); transaction.begin(); for (int i = 1; i <= 5; i++) { Address addr = new Address(); addr.setCity("广州-" + i); Person p = new Person(); p.setName("macrotea-" + i); p.setAddress(addr); session.save(addr); session.save(p); } transaction.commit(); session.close(); } private static void test_load() { Session session = HibernateSessionFactory.getSession(); Transaction transaction = session.beginTransaction(); transaction.begin(); Person p=(Person)session.get(Person.class, 1); transaction.commit(); session.close(); System.out.println(p.toString()); System.out.println(p.getAddress().toString()); } public static void main(String[] args) { //prepare_data(); test_load(); } }
<hibernate-mapping package="com.macrotea.hb.model"> <class name="Person"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <!--若OneToOneunique="true",而addressId为Person表生成的列名--> <many-to-one name="address" column="addressId" unique="true"/> </class> </hibernate-mapping> <hibernate-mapping package="com.macrotea.hb.model"> <class name="Address"> <id name="id"> <generator class="native" /> </id> <property name="city" /> </class> </hibernate-mapping>