@ManyToOne单向多对一
程序员文章站
2022-04-12 20:31:49
...
单向多对一实现有两种方式:注解方式和XML配置方式,代码如下:
一、注解方式:
Grade.java
package cn.siggy.pojo;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "GRADE")
public class Grade {
private int id;
private String name;
// Property accessors
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false, precision = 10, scale = 0)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "NAME")
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
Student.java
package cn.siggy.pojo;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "STUDENT")
public class Student {
private Integer id;
private String name;
private Integer age;
private Grade grade;
// Property accessors
@Id
@GeneratedValue
@Column(name = "ID", unique = true, nullable = false, precision = 10, scale = 0)
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "NAME")
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "AGE", precision = 10, scale = 0)
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@ManyToOne(cascade=CascadeType.REFRESH,optional=false)
@JoinColumn(name="GRADE_ID", nullable = false)
public Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库信息 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@10.18.100.126:1521:gsdb</property>
<property name="connection.username">db_lzsmw</property>
<property name="connection.password">pass_lzsmw</property>
<!--hibernate可选项 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- hbm文件 -->
<mapping class="cn.siggy.pojo.Grade"/>
<mapping class="cn.siggy.pojo.Student"/>
</session-factory>
</hibernate-configuration>
二、XML配置方式
Grade.java
package cn.siggy.pojo;
import java.util.HashSet;
import java.util.Set;
public class Grade {
private int id;
private String name;
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;
}
}
Grade.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
Student.java
package cn.siggy.pojo;
public class Student {
private int id;
private String name;
private int age;
private Grade grade;
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 Grade getGrade() {
return grade;
}
public void setGrade(Grade grade) {
this.grade = grade;
}
}
Student.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.siggy.pojo">
<class name="Student">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 多对一 name:属性名 class:指明属性对应的类 column:指数据库表中对应的列明 -->
<many-to-one name="grade" class="Grade" column="grade_id"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!--数据库信息 -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@10.18.100.126:1521:gsdb</property>
<property name="connection.username">db_lzsmw</property>
<property name="connection.password">pass_lzsmw</property>
<!--hibernate可选项 -->
<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- hbm文件 -->
<mapping resource="cn/siggy/pojo/Student.hbm.xml"/>
<mapping resource="cn/siggy/pojo/Grade.hbm.xml"/>
<!-- 使用注解 -->
<!--<mapping class="cn.siggy.pojo.Grade"/>
<mapping class="cn.siggy.pojo.Student"/>-->
</session-factory>
</hibernate-configuration>
以下数据库表由程序自动创建: