关于Hibernate的关联问题

多对一单向关联

1)关联映射
把数据库中的表之间(业务)关系映射为对象,在对象之间建立一对多,一对一,多对多等关联。
2)好处(简单,方便)
对由关联关系的多张表之间的操作,转化为对对象之间的操作
3)多对一单向关联:
 Emp----->Dept
     public class Emp {
// 从Emp------>Dept
private Dept dept;
... 
}
   <many-to-one name="dept"  class="Dept"  column="deptId">
4)orm映射文件的格式  在多的一端配置
<many-to-one name="属性名" class="与之关联的类" column="表中的列名"/>

一对多单向关联

从“一”的一端查询到“多”的一端
1)实体类(po/entity)
“一”的一端用set集合
为什么用set集合:因为不能确定多的一端有多少对象,而且没有顺序要求,使用set集合来保存多的一端的对象维护一对多的关联关系
2)orm映射文件
<set name="emps" >
<!-- deptId维护关联关系,追加到t_emp中
值: 是当前Dept的主键的值-->
<key column="deptId"></key>
<one-to-many class="Emp"/>
</set>  

多对一双向关联

就是一对多单向关联和多对弈单向关联二者合二为一
注意:那个外键(两个约束必须要执行同一个外键):deptId,多对一 一对多,外键名字必须一致
    <many-to-one name="dept"  class="Dept"  column="deptId">
    </many-to-one>
    <set name="emps" >
<key column="deptId"></key>
<one-to-many class="Emp"/>
</set>

多对多单向关联

Job.java
public class Job {
	private int id;
	private String jname;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getJname() {
		return jname;
	}
	public void setJname(String jname) {
		this.jname = jname;
	}
	
}


Emp.java
public class Emp {
	private int id;
	private String ename;
	private Set jobs;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public Set getJobs() {
		return jobs;
	}
	public void setJobs(Set jobs) {
		this.jobs = jobs;
	}
	
}
Job.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="com.tarena.po">
	<class name="Job"  table="t_job">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="jname"></property>
	
	</class>
	</hibernate-mapping>


Emp.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="po">
	<class name="Emp"  table="t_emp">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="ename"></property>
<!--table="t_emp_job"   创建一个新的表,来维护关联关系 -->
		<set name="jobs"  table="t_emp_job">
<!-- key的值是当前主键的值 -->
			<key column="eid"></key>
<!-- jid的值是job中默认的主键的值 -->
			<many-to-many class="Job"  column="jid">
			</many-to-many>
		</set>
	</class>
	</hibernate-mapping>

多对多双向关联

Job.java
public class Job {
	private int id;
	private String jname;
	private Set emps;
	public Set getEmps() {
		return emps;
	}
	public void setEmps(Set emps) {
		this.emps = emps;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getJname() {
		return jname;
	}
	public void setJname(String jname) {
		this.jname = jname;
	}
	
}


Emp.java
public class Emp {
	private int id;
	private String ename;
	private Set jobs;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public Set getJobs() {
		return jobs;
	}
	public void setJobs(Set jobs) {
		this.jobs = jobs;
	}
	
}
Job.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="com.tarena.po">
	<class name="Job"  table="t_job">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="jname"></property>
		<set name="emps" table="t_emp_job">
			<key column="jid"></key>
			<many-to-many class="Emp" column="eid"></many-to-many>
		</set>
	</class>
	</hibernate-mapping>
Emp.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="com.tarena.po">
	<class name="Emp"  table="t_emp">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="ename"></property>
<!--table="t_emp_job"   创建一个新的表,来维护关联关系 -->
		<set name="jobs"  table="t_emp_job">
<!-- key的值是当前主键的值 -->
			<key column="eid"></key>
<!-- jid的值是job中默认的主键的值 -->
			<many-to-many class="Job"  column="jid">
			</many-to-many>
		</set>
	</class>
	</hibernate-mapping>

一对一主键双向关联

Card.java
public class Card {
	private int id;
	private String cardNo;
	private Person person;
	
	public Person getPerson() {
		return person;
	}
	public void setPerson(Person person) {
		this.person = person;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	
}
Person.java
public class Person {
	private int id;
	private String pname;
	private Card card;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public Card getCard() {
		return card;
	}
	public void setCard(Card card) {
		this.card = card;
	}
	
}
Card.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="com.tarena.po">
	<class name="Card"  table="t_card">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="cardNo"></property>
		<one-to-one name="person"  class="Person"></one-to-one>
	</class>
</hibernate-mapping>
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="com.tarena.po">
	<class name="Person"  table="t_person">
		<id name="id">
			<generator class="foreign">
			<!-- 参照Card的id属性(主键) -->
				<param name="property">card</param>
			</generator>
		</id>
		<property name="pname"></property>
		<one-to-one name="card"  class="Card"  constrained="true" ></one-to-one>
		
	</class>
</hibernate-mapping>

一对一唯一外键双向关联

User.java
public class User {
	private int id;
	private String uname;
	private int age;
	private Address address;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUname() {
		return uname;
	}
	public void setUname(String uname) {
		this.uname = uname;
	}
	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 int id;
	private String province;
	private String city;
	private User user;
	
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	
}

User.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="com.tarena.po">
	<class name="User" table="t_user">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="uname"></property>
		<property name="age"></property>
		<many-to-one name="address"  column="addressId" 
				 unique="true"></many-to-one>
	</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="com.tarena.po">
	<class name="Address"  table="t_address">
		<id name="id">
			<generator class="native"></generator>
		</id>
		<property name="province"></property>
		<property name="city"></property>
		<one-to-one name="user"  class="User"  
		property-ref="address"  ></one-to-one>
		
		
		
	</class>
</hibernate-mapping>









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值