您的位置:首页 > 其它

hibernate中对联合主键数据保存的一种处理方式

2013-09-22 21:32 465 查看
1、有二张表:CODE_TABLE和CODE_TABLE_TYPE,具体结构如下:

CREATE TABLE  CODE_TABLE
(
TYPE_ID VARCHAR(12) NOT NULL,
ID VARCHAR(8) NOT NULL,
NAME VARCHAR(60) NOT NULL,
DESC VARCHAR(300) NOT NULL,
CONSTRAINT FK_CODE_TYPE FOREIGN KEY (TYPE_ID) REFERENCES CODE_TABLE_TYPE (ID),
CONSTRAINT PK_CODE_TABLE PRIMARY KEY (ID, TYPE_ID)
)


CREATE TABLE CODE_TABLE_TYPE
(
ID VARCHAR(12) NOT NULL,
NAME VARCHAR(60) NOT NULL,
DESC VARCHAR(200) NOT NULL,
ORDER INTEGER NOT NULL DEFAULT 0,
CONSTRAINT PK_CODE_TYPE PRIMARY KEY (ID)
)


2、对应的实体BEAN如下:

(1)、CodeTableType.java

@Entity
@Table(name = "CODE_TABLE_TYPE",  uniqueConstraints = {})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Operator()
@EntityIsLog()
public class  CodeTableType implements Cloneable
{
@Listable(key="codetabletype.id",width=10,align="center")
@Filter()
private String id;
@Listable(key="codetabletype.codeTableTypeName",width=12,align="left")
@Filter()
private String codeTableTypeName;

@Listable(key="codetabletype.codeTableTypeDesc",width=20,align="left")
@Filter()
private String codeTableTypeDesc;

private Set<CodeTable> codeTables=new HashSet<CodeTable>();

public CodeTableType()
{
}

@Id
@Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = false,length = 12)
@Order(value=1)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}

@Column(name = "NAME", unique = false, nullable = false, insertable = true, updatable = true, length = 60)
@Order(value=2)
public String getCodeTableTypeName() {
return codeTableTypeName;
}
public void setCodeTableTypeName(String codeTableTypeName) {
this.codeTableTypeName = codeTableTypeName;
}

@Column(name = "DESC", unique = false, nullable = false, insertable = true, updatable = true, length = 200)
@Order(value=4)
public String getCodeTableTypeDesc() {
return codeTableTypeDesc;
}
public void setCodeTableTypeDesc(String codeTableTypeDesc) {
this.codeTableTypeDesc = codeTableTypeDesc;
}

@OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.LAZY, mappedBy = "codeTableType")
@Order(value=-1)
public Set<CodeTable> getCodeTables() {
return codeTables;
}
public void setCodeTables(Set<CodeTable> codeTables) {
this.codeTables = codeTables;
}

}


(2)、CodeTable .java

@Entity
@Table(name = "CODE_TABLE",  uniqueConstraints = {})
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Operator()
@IdClass(CodeTablePK.class)
public class  CodeTable
{

@Listable(key="codetable.id",width=10,align="center")
@Filter()
@Viewable()
private String id;
@Listable(key="codetable.codetabletype",width=12,align="left")
private CodeTableType codeTableType;
@Listable(key="codetable.name",width=10,align="left")
@Filter()
@Viewable()
private String name;
@Listable(key="codetable.desc",width=20,align="left")
@Viewable()
private String desc;

public CodeTable()
{
}

@Id
@Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = false,length = 8)
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}

@Id
@ManyToOne(cascade = {}, fetch = FetchType.LAZY)
@JoinColumn(name="TYPE_ID", unique = false, nullable = false, insertable = true, updatable = false)
@Relation(key="id",title ="codeTableTypeName")
public CodeTableType getCodeTableType() {
return codeTableType;
}
public void setCodeTableType(CodeTableType codeTableType) {
this.codeTableType = codeTableType;
}

@Column(name = "NAME", unique = false, nullable = false, insertable = true, updatable = true, length = 60)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

@Column(name = "DESC", unique = false, nullable = true, insertable = true, updatable = true, length = 600)
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}


(3)、CodeTablePK.java

@Embeddable
public class CodeTablePK implements Serializable {

private String id;

private CodeTableType codeTableType;

public CodeTablePK() {
}

public CodeTablePK(String id, CodeTableType codeTableType) {
this.id = id;
this.codeTableType = codeTableType;
}
@Column(name = "ID", unique = true, nullable = false, insertable = true, updatable = false,length = 8)
public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}
@OneToOne(cascade = {}, fetch = FetchType.LAZY)
@JoinColumn(name="TYPE_ID", unique = false, nullable = false, insertable = true, updatable = false)
@Relation(key="id",title ="codeTableTypeName")
public CodeTableType getCodeTableType() {
return codeTableType;
}

public void setCodeTableType(CodeTableType codeTableType) {
this.codeTableType = codeTableType;
}

}


3、对CODE_TABLE的操作

CodeTableType  ct = codeTableTypeService.get(type);
CodeTablePK  pk = new CodeTablePK();
pk.setCodeTableType(ct);
pk.setId("AA");
CodeTable obj = getHibernateTemplate().get(CodeTable.class, pk);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: