У меня есть модель предметной области, ранее структурированная для 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
и передать его конструктору?
Я использую этот идентификатор и для других классов:
@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 первичных ключа.
Можно ли сохранить такую структуру?