EJB3.0里的@SecondaryTable 可以将一个 entity bean 对应数据库里的多张表,
下面的代码是仿照javaee doc 上写的,测试通过。
数据表图:
@SuppressWarnings("serial") @Entity @Table(name="part") @SecondaryTable( name="partdetail", pkJoinColumns={ @PrimaryKeyJoinColumn(name="partnumber",referencedColumnName="partnumber"), @PrimaryKeyJoinColumn(name="revision",referencedColumnName="revision") } ) @IdClass(PartKey.class) public class Part implements Serializable { private String partNumber; private Integer revision; private String partDescription; private Date revisionDate; private Part bomPart; private List<Part> parts; private Serializable drawing; private String specification; @Column(table="partdetail") @Lob public Serializable getDrawing() { return drawing; } public void setDrawing(Serializable drawing) { this.drawing = drawing; } @Column(table="partdetail") @Lob public String getSpecification() { return specification; } public void setSpecification(String specification) { this.specification = specification; } @Id @Column(name="partnumber",nullable=false) public String getPartNumber() { return partNumber; } public void setPartNumber(String partNumber) { this.partNumber = partNumber; } @Id @Column(name="revision",nullable=false) public Integer getRevision() { return revision; } public void setRevision(Integer revision) { this.revision = revision; } @Column(name="partdescription") public String getPartDescription() { return partDescription; } public void setPartDescription(String partDescription) { this.partDescription = partDescription; } @Temporal(TemporalType.DATE) public Date getRevisionDate() { return revisionDate; } public void setRevisionDate(Date revisionDate) { this.revisionDate = revisionDate; } @ManyToOne @JoinColumns({ @JoinColumn(name="bompartnumber",referencedColumnName="partnumber"), @JoinColumn(name="bomrevision",referencedColumnName="revision") }) public Part getBomPart() { return bomPart; } public void setBomPart(Part bomPart) { this.bomPart = bomPart; } @OneToMany(mappedBy="bomPart",cascade=CascadeType.ALL) public List<Part> getParts() { return parts; } public void setParts(List<Part> parts) { this.parts = parts; } }
其中:
@SecondaryTable( name="partdetail",//表示从表名 pkJoinColumns={// 从表到主表的主键映射 @PrimaryKeyJoinColumn(name="partnumber",referencedColumnName="partnumber"), @PrimaryKeyJoinColumn(name="revision",referencedColumnName="revision") // 其中:name为从表字段,referencedColumnName为主表字段 } )
还有映射字段时注意加上表名:
@Column(table="partdetail") @Lob public Serializable getDrawing() { return drawing; } @Column(table="partdetail") @Lob public String getSpecification() { return specification; }