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

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






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值