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 นั่นเอง
วันนี้เอาง่ายๆ ไปนอนล่ะ ฝันดีผีนอนเป็นเพื่อนครับ ^___^
ไม่มีความคิดเห็น:
แสดงความคิดเห็น