1. สร้าง embeded table ที่จะใช้เป็น composite key
hash code กับ equal ให้ใช้ attribute ทั้งหมด (3 ตัว)
package com.blogspot.na5cent.model;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Embeddable;
/**
*
* @author Redcrow
*/
@Embeddable //บอกว่าเป็น embeded
public class DocumentSequencePK implements Serializable {
@Column(name = "SEQUENCE_NUMBER_MAJOR", nullable = false)
private Long sequenceNumberMajor;
@Column(name = "SEQUENCE_NUMBER_MINOR", nullable = false)
private Integer sequenceNumberMinor;
@Column(name = "FISCAL_YEAR", nullable = false)
private Integer fiscalYear;
public DocumentSequencePK() {
}
public DocumentSequencePK(Long sequenceNumberMajor, Integer sequenceNumberMinor, Integer fiscalYear) {
this.sequenceNumberMajor = sequenceNumberMajor;
this.sequenceNumberMinor = sequenceNumberMinor;
this.fiscalYear = fiscalYear;
}
public Long getSequenceNumberMajor() {
return sequenceNumberMajor;
}
public Integer getSequenceNumberMinor() {
return sequenceNumberMinor;
}
public Integer getFiscalYear() {
return fiscalYear;
}
@Override
public int hashCode() {
int hash = 5;
hash = 41 * hash + (this.sequenceNumberMajor != null ? this.sequenceNumberMajor.hashCode() : 0);
hash = 41 * hash + (this.sequenceNumberMinor != null ? this.sequenceNumberMinor.hashCode() : 0);
hash = 41 * hash + (this.fiscalYear != null ? this.fiscalYear.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final DocumentSequencePK other = (DocumentSequencePK) obj;
if (this.sequenceNumberMajor != other.sequenceNumberMajor && (this.sequenceNumberMajor == null || !this.sequenceNumberMajor.equals(other.sequenceNumberMajor))) {
return false;
}
if (this.sequenceNumberMinor != other.sequenceNumberMinor && (this.sequenceNumberMinor == null || !this.sequenceNumberMinor.equals(other.sequenceNumberMinor))) {
return false;
}
if (this.fiscalYear != other.fiscalYear && (this.fiscalYear == null || !this.fiscalYear.equals(other.fiscalYear))) {
return false;
}
return true;
}
}
2. ที่ Entity Class
attribute id ให้ใช้ annotation @EmbeddedId ส่วน data type ให้ใช้ class ที่เป็น embeded table หรือ composite key ที่เราเขียนขึ้นในข้อ 1
hash code กับ equal ที่ attribute id ครับ
package com.blogspot.na5cent.model;
import java.io.Serializable;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
*
* @author Recrow
*/
@Entity
@Table(name = "DOCUMENT_SEQUENCE")
public class DocumentSequence implements Serializable {
@EmbeddedId
private DocumentSequencePK id; //*****************
public DocumentSequence() {
}
public DocumentSequence(DocumentSequencePK id) {
this.id = id;
}
public DocumentSequencePK getId() {
return id;
}
public void setId(DocumentSequencePK id) {
this.id = id;
}
@Override
public int hashCode() {
int hash = 5;
hash = 97 * hash + (this.id != null ? this.id.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final DocumentSequence other = (DocumentSequence) obj;
if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
return false;
}
return true;
}
}
ตัวอย่างการใช้งาน
เวลาที่เราจะ set id เราก็ต้องสร้าง object ของ class DocumentSequencePK ก่อน จากนั้นก็เซตค่าต่างๆลงไป แล้วก็ค่อยส่ง object นั้นเข้า constructor ของ entity class DocumentSequence แค่นั้นเองครับ
... ... DocumentSequencePK primaryKey = new DocumentSequencePK(registrationOutRunningNumber, 0, DateUtils.getFiscalYear(new Date())); DocumentSequence sequence = new DocumentSequence(pk); ... ...แค่นี้ เราก็จะได้ composite key มาใช้งานแล้วครับ
เวลามันเอาไปสร้างเป็น table มันก็จะเป็น table ธรรมดาๆ เหมือนที่เราสร้างโดยใช้ SQL นั่นเอง
วันนี้เอาง่ายๆ ไปนอนล่ะ ฝันดีผีนอนเป็นเพื่อนครับ ^___^
ไม่มีความคิดเห็น:
แสดงความคิดเห็น