由ManyToOne注释的方法。
@JoinColumn
我们知道两个实体可以关联,但对应到Table中需要指定一个列作为外键。假如不指定name,那么认为主表中的列和附表中的主键有相同名称的作为外键。如果不指定referencedColumnName,则认为外键对应副表的主键。
EJB 3.0开发指南之实体Bean(3)
时间:2009-11-27 天极
@JoinColumns
用来指示符合主键,在后面的章节中介绍。
这个例子主要有以下几个文件,这个例子主要实现了管理学生分数的功能。Student是一个实体Bean,管理学生的基本信息(姓名和各课分数),其中学生的分数又是一个实体Bean。TacherBean是一个无状态的会话Bean,用来调用实体Bean。和前面的例子一样,我们还是使用Client测试。
·Student.java:实体Bean。
·Score.java:实体Bean。
·Teacher.java:会话Bean的业务接口
·TeacherBean.java:会话Bean的实现类
·Client.java:测试EJB的客户端类。
·jndi.properties:jndi属性文件,提供访问jdni的基本配置属性。
·Build.xml:ant 配置文件,用以编译、发布、测试、清除EJB。
下面针对每个文件的内容做一个介绍。
Student.java
package com.kuaff.ejb3.entity;
import javax.ejb.CascadeType;
import javax.ejb.Entity;
import javax.ejb.FetchType;
import javax.ejb.GeneratorType;
import javax.ejb.Id;
import javax.ejb.JoinColumn;
import javax.ejb.OneToMany;
import javax.ejb.Table;
import java.util.ArrayList;
import java.util.Collection;
import java.io.Serializable;
@Entity
@Table(name = "STUDENT")
public class Student implements Serializable
{
//主键
private int id;
//学生名
private String name;
//学生的分数
private Collection<Score> scores;
//主键自动产生
@Id(generate = GeneratorType.AUTO)
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 void addScores(String name,int number)
{
if (scores == null)
{
scores = new ArrayList<Score>();
}
Score score = new Score();
score.setName(name);
score.setNumber(number);
score.setStudent(this);
scores.add(score);
}
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinColumn(name = "student_id")
public Collection<Score> getScores()
{
return scores;
}
public void setScores(Collection<Score> scores)
{
this.scores = scores;
}
}
EJB 3.0开发指南之实体Bean(4)
时间:2009-11-27 天极
Student.java实现了Student实体Bean,它提供学生的基本情况以及学生的得分情况,得分是另外一个实体Bean。Student实体Bean和Score实体Bean是一对多的关系,站在Score的角度看是多对一的关系。
实体Bean需要使用@Entity做注释,另外它指定这个实体Bean与表STUDENT对应(通过注释@Table(name = "STUDENT")),你可以在JBOSS的数据库中看到这个表。
Score.java
package com.kuaff.ejb3.entity;
import java.io.Serializable;
import javax.ejb.Entity;
import javax.ejb.GeneratorType;
import javax.ejb.Id;
import javax.ejb.JoinColumn;
import javax.ejb.ManyToOne;
import javax.ejb.Table;
@Entity
@Table(name = "Score")
public class Score implements Serializable
{
private int id;
private String name;
private int number;
private Student student;
//
|