ฉันมีโมเดลโดเมนที่มีโครงสร้างก่อนหน้านี้สำหรับ JPA ดังนี้:
@Entity
@Table(name="TABLE")
public class MyClassImpl implements MyClass, Serializable {
@Embeddable
public static class ID {
@Column( name = "COL_1", nullable = false)
protected int id1;
@Column( name = "COL_2", nullable = false)
protected int id2;
@Column( name = "COL_3", nullable = false, unique = true)
protected String id3;
...
}
@EmbeddedId
protected ID id;
@Column(name = "COL_4")
protected String otherData;
...
}
ตอนนี้ฉันกำลังย้ายไปที่ MyBatis และฉันมีข้อสงสัยเกี่ยวกับการทำแผนที่อะไรทำนองนั้น
ฉันรู้ว่าฉันสามารถสร้างผลลัพธ์ได้เช่น:
<resultMap id="myClassResultMap" type="MyClass">
<association property="id" javaType="MyClass.ID">
<id property="id1" column="COL_1" />
<id property="id2" column="COL_2" />
<id property="id3" column="COL_3" />
</association>
<result property="otherData" column="COL_4" />
...
</resultMap>
ฟิลด์ <id ... />
ใน association
จะถูกนำมาใช้เป็นรหัสของคลาสหรือไม่ จะเป็นอย่างไรหากฉันต้องการทำเครื่องหมาย id
เป็น final
แล้วส่งต่อให้ Constructor?
ฉันใช้ ID นั้นสำหรับคลาสอื่นเช่นกัน:
@Entity
@Table(name = "OTHERTABLE")
public class MyOtherClassImpl implements MyOtherClass, Serializable {
@Embeddable
public static class ID {
@Embedded
MyClass.ID ref;
@Column(name = "ID", nullable = false, unique = true)
protected int id;
//methods
}
@EmbeddedId
protected ID id;
@Column(name = "COL_5")
protected String otherData;
...
}
เนื่องจากทั้งสองตารางแชร์คีย์หลัก 3 อัน
สามารถรักษาโครงสร้างดังกล่าวได้หรือไม่?