ORM--複合主鍵--Hibernate4.0註解版

實現複合主鍵的方法比較多,我通常採用以下方式。(固然了,能不使用複合主鍵就不使用) java

Student類中,經過@EmbeddedId來指定主鍵是複合主鍵。 app

UserName類同時須要@Embeddable來標註。 socket

Student類中不單單包含了複合主鍵,也包含了其餘類型的屬性,例如@Lob(經過使用Oracle10gR2來測試,並無出現「no more data read from socket"的錯誤。) ide

複雜屬性,也能夠經過@Embeddable來進行標註。 測試



@Entity
@Table(name="tmp_student")
public class Student implements Serializable {
	
	@EmbeddedId
	private UserName username;
	
	private Address address;
	
	public Address getAddress() {
		return address;
	}

	public void setAddress(Address address) {
		this.address = address;
	}

	public UserName getUsername() {
		return username;
	}

	public void setUsername(UserName username) {
		this.username = username;
	}
	
	@Lob
	private byte []images;
	
	@Lob
	private String text;

	public byte[] getImages() {
		return images;
	}

	public void setImages(byte[] images) {
		this.images = images;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}
	
	
	@Embeddable
	public static class Address implements Serializable{
		
		private String homeAddress;
		
		private String officeAddress;
		
		
		public String getHomeAddress() {
			return homeAddress;
		}
		public void setHomeAddress(String homeAddress) {
			this.homeAddress = homeAddress;
		}
		public String getOfficeAddress() {
			return officeAddress;
		}
		public void setOfficeAddress(String officeAddress) {
			this.officeAddress = officeAddress;
		}
		
	}
	
	
	@Embeddable
	public static class  UserName implements Serializable{
		/**
		 * 
		 */
		private static final long serialVersionUID = -6684160391794613605L;
		
		private String first_name;
		private String last_name;
		public String getFirst_name() {
			return first_name;
		}
		public void setFirst_name(String first_name) {
			this.first_name = first_name;
		}
		public String getLast_name() {
			return last_name;
		}
		public void setLast_name(String last_name) {
			this.last_name = last_name;
		}
		
		@Override
		public boolean equals(Object object){
			if(object instanceof UserName){
				UserName userName=(UserName) object;
				return new EqualsBuilder().append(this.first_name, userName.getFirst_name())
										  .append(this.last_name, userName.getLast_name())
										  .isEquals();
			}
			else{
				return false;
			}
			
			
		}
		
		@Override
		public int hashCode(){
			//取任意素數17
			int result=17;
			result = 31*result +first_name.hashCode();
			result = 31*result +last_name.hashCode();
			return result;
		}
		
		
	}
}
相關文章
相關標籤/搜索