우선, 나는 JPA와 Hibernate Annotations를 처음 사용했다.Hibernate JPA 상속 id 매핑
데이터 액세스 레이어에서 hibernate 3.5 및 hbm.xml을 기반으로하는 많은 시스템과 솔루션이 현재 프레임 워크에서 개발되었습니다. 이제 hibernate 4.1과 Annotation으로 이동하여 hbm.xml 파일을 제거하기로 결정했습니다.
하지만 여기에 내 문제가 있습니다.
"id"와 "version"과 같은 다른 필드가 들어있는 GenericEntity라는 모든 엔티티에 대한 기본 클래스가 있습니다. 이 GenericEntity 은 실제 테이블에 직접 매핑 된이 아니며 각 엔티티는 이러한 필드를 실제 테이블/열로 매핑해야합니다.
public abstract class GenericEntity implements Serializable {
public static final short UNSAVED_VALUE = -1;
private long id = UNSAVED_VALUE;
private int version;
... getters and setters
}
public class User extends GenericEntity {
private String username;
private String password;
... getters and setters
}
과 hbm.xml이
입니다 :이제 주석에, 나는 실체
여기내가 가진 무엇의 ID와 버전 필드/주석을 생략 할 수있는 방법을 찾을 수 없습니다
<class name="my.User" table="TBL_USER" optimistic-lock="version">
<id name="id" column="USR_ID" unsaved-value="-1">
<generator class="identity"/>
</id>
<version name="version" column="USR_VERSION"/>
<property name="username" column="USR_USERNAME" type="string" />
<property name="password" column="USR_PASSWORD" type="string" />
</class>
GenericEntity에 대한 매핑이없고 GenericEntity에 대한 User에 대한 상속 매핑이 없습니다.
어떻게 특수 효과를 사용할 수 있습니까? !!
솔루션은 getId 및 setId를 추상 메서드로 정의하는 것이지만 ID와 버전을 수천 개의 내 개체에 추가 할 수 없습니다.
또한 GenericEntity에 대해 최대 절전 모드를 사용할 수 없습니다. 왜냐하면 현재 테이블을 쉽게 변경할 수 없으며 다른 한편으로는 성능에 많은 불이익을 당하기 때문입니다.
또한 내 프레임 워크의 다른 부분의 변경을 최소화하고 싶습니다. GenericEntity는 DAL에서 널리 사용됩니다.
감사합니다.
Meysam Te.
탱크, 내 시간을 절약했습니다. 하지만 "GeneratedValue 전략"에 문제가 있습니다. 어딘가에 IDENTITY가 있어야하며 어딘가에 SEQUENCE가 필요합니다. 하위 클래스에서이를 어떻게 재정의 할 수 있습니까? –