关联映射之①:单向N--->1关联
来源:互联网 发布:dg加密软件破解 编辑:程序博客网 时间:2024/06/05 20:11
单向N--->1关联,比如多个人对应同一个住址,只需从人实体端可以找到对应的地址实体,无须关心某个地址的全部住户。
为了让两个持久化类支持这种关联映射,程序应该在N的一端的持久化类中增加一个属性,该属性引用1的一端的关联实体。
① 无连接表的N--->1关联
hibernate.cfg.xml :
<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="connection.url">jdbc:mysql://localhost:3306/temp</property> <property name="connection.username">root</property> <property name="connection.password">mysqladmin</property> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hbm2ddl.auto">update</property> <property name="show_sql">true</property> <property name="format_sql">true</property> <mapping resource="db/mapping/Person.hbm.xml"/> <mapping resource="db/mapping/Address.hbm.xml"/> </session-factory></hibernate-configuration>Person.java :
public class Person {private int id;private String name;private int age;private Address address;public int getId() {return id;}public void setId(int id) {this.id = id;}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 Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}}Address.java :
public class Address {private Integer addressId;private String addressDetail;public Address() {}public Address(String addressDetail) {this.addressDetail = addressDetail;}public Integer getAddressId() {return addressId;}public void setAddressId(Integer addressId) {this.addressId = addressId;}public String getAddressDetail() {return addressDetail;}public void setAddressDetail(String addressDetail) {this.addressDetail = addressDetail;}}Person.hbm.xml :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="db.domain"> <class name="Person" table="persons"> <id name="id" column="person_id"> <generator class="identity"/> </id> <property name="name" type="string"/> <property name="age" type="integer"/> <many-to-one name="address" class="Address" cascade="all" column="address_id"/> </class></hibernate-mapping>Address.hbm.xml :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="db.domain"> <class name="Address" table="address"> <id name="addressId" column="address_id"> <generator class="identity"/> </id> <property name="addressDetail" type="string"/> </class></hibernate-mapping>Test.java :
public class Test {public static void main(String[] args) {Session session=HibernateSessionFactory.getSession();Transaction txt=session.beginTransaction();Person p=new Person();p.setName("tom");p.setAge(25);Address a=new Address("广州天河");p.setAddress(a);session.persist(p);Address a2=new Address("上海虹口");p.setAddress(a2);txt.commit();HibernateSessionFactory.closeSession();}}
② 有连接表的N--->1关联
对于绝大部分单向N--->1关联,使用基于外键的关联映射已经足够了。但是由于底层数据库建模时也可以使用连接表来建立这种关联关系,因此Hibernate也为这种关联关系提供了支持。
Person.hbm.xml :
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="db.domain"> <class name="Person" table="persons"> <id name="id" column="person_id"> <generator class="identity"/> </id> <property name="name" type="string"/> <property name="age" type="integer"/> <join table="person_address"> <key column="person_id"/> <many-to-one name="address" class="Address" column="address_id" cascade="all"/> </join> </class></hibernate-mapping>其余代码不变。
- 关联映射之①:单向N--->1关联
- 关联映射之③:单向1--->N关联
- 关联映射之④:单向N--->N关联
- Hibernate的关联映射(1)-单向N-1关联
- Hibernate的关联映射(3)-单向1-N关联
- 【hibernate】关联映射那些事(一)---单向N-1关联与单向1-1关联
- 【hibernate】关联映射那些事(二)--单向1-N映射和单向N-N映射
- 关联映射之②:单向1--->1关联
- hibernate关联映射之一对一单向关联
- Hibernate的关联映射(4)-单向N-N关联
- Hibernate的关联映射之1-N关联映射
- Hibernate学习随笔-----关系映射(1)单向N-1关联
- Hibernate关系映射1:单向N-1关联
- 1011--映射一对多关联关系(.单向 n-1)
- Hibernate学习随笔-----关系映射(3)单向1-N关联
- Hibernate单向关联N-1
- Hibernate单向关联1-N
- Hibernate 单向N-1关联
- Tomcat中<url-pattern/>的匹配规则
- Oracle备份expdp报错
- 致青春
- sqlserver oracle sql语句执行对比
- WebService详解(一)
- 关联映射之①:单向N--->1关联
- 新人,请大家多多关照
- PythonChallenge 挑战之路 Level-21
- 华为机试题——字符串操作
- mysql 选择插入数据(包含不存在列)
- HttpClient ConnectionPoolTimeoutException: Timeout waiting for connection
- 如何在Liunx环境下查看主机的硬件信息
- 概率(1)---生日问题
- python程序