一对多:
单向注解:
@OneToMany
@JoinColumn(name="tid")
@Cascade(CascadeType.SAVE_UPDATE)
@Basic(fetch=FetchType.EAGER)
public Set<Student> getStudents() {
return students;
}
单向XML:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<set name="persons">
<key column="addressId"
not-null="true"/>
<one-to-many class="Person"/>
</set>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )
多对一:
单向注解:
@ManyToOne(cascade=CascadeType.ALL)
@JoinColumn(name="teacherId")
public Teacher getTeacher() {
return teacher;
}
单向XML:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )
一对多,多对一双向:
注解:
在EJB3规范中多对一这端几乎总是双向关联中的主体(owner)端, 而一对多这端的关联注解为@OneToMany( mappedBy=... )
Teacher.java
Teacher.java
@OneToMany(mappedBy="teacher")
@Cascade(CascadeType.SAVE_UPDATE)
public Set<Student> getStudents() {
return students;
}
Student.java
@ManyToOne
@JoinColumn(name="teacherId")
public Teacher getTeacher() {
return teacher;
}
XML:
<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<many-to-one name="address"
column="addressId"
not-null="true"/>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
<set name="people" inverse="true">
<key column="addressId"/>
<one-to-many class="Person"/>
</set>
</class>
create table Person ( personId bigint not null primary key, addressId bigint not null )
create table Address ( addressId bigint not null primary key )