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

来源:互联网 发布:英语歌教学软件 编辑:程序博客网 时间:2024/05/21 17:36

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

@Embeddablepublic 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);