2010-03-04 5 views
7

Hibernate에 의해 매핑 된 Person 엔티티가 데이터베이스 카탈로그 "Active"의 데이터베이스 테이블에 매핑되어 있습니다. 일정 기간 후에 "활성"카탈로그의이 데이터베이스 테이블에있는 레코드는 데이터베이스 카탈로그 "기록"에있는 테이블의 정확한 사본으로 아카이브/이동됩니다. 나는 Active and History Catalogs에서 검색 할 필요가있다. Hibernate annotation으로 2 개의 클래스가 확장되는 추상 클래스를 만드는 것보다 이것을 모델링하는 더 좋은 방법이 있는가?하나 이상의 카탈로그에 존재하는 엔티티에 대한 Hibernate Annotation

이것은 내가 지금 가지고있는 것입니다.

@MappedSuperclass 
public abstract class Person { 

    @Id 
    private Integer id; 
    private String name; 
} 

@Entity 
@Table(name="Person", catalog="Active") 
public class PersonActive extends Person { 
} 

@Entity 
@Table(name="Person", catalog="History") 
public class PersonHistory extends Person { 
} 

답변

1

내 지식에 따르면, 주석을 사용하면 올바른 방법이 될 수 있습니다 (두 개의 테이블이있어서 두 개의 엔티티가 필요합니다). 그런 다음 Person 엔티티에서 다형성 쿼리를 실행합니다. 나는 이걸 꽤 깨끗하게 찾았 어.

추신 : 매핑 파일에서이를 수행하는 방법에 대한 포인터를 추가 할 수 있습니까? 정말 궁금합니다.

+1

통찰력에 감사드립니다. 과거에 Spring JDBC를 사용하는 다른 프로젝트에서이 비즈니스 요구 사항을 수행했을 때 두 테이블에 대해 하나의 클래스와 행 매퍼를 갖게되었습니다. 이전에 최대 절전 모드로 수행하지 않았지만 여기에 예제가 있습니다. http://old.nabble.com/Mapping-class-to-multiple-tables-with-entity-name-(hibernate-plugin)- to9547563.html <최대 절전 모드 매핑> <클래스 테이블 = "CLASS"이름 = "some.my.Class"> (...) <클래스의 엔티티 이름 = "보관"테이블 = " ARCHIVED_CLASS " name ="some.my.Class "> (...)

0

나는 거기에 최대 절전 모드라는 이름의 샤드의 하위 프로젝트가 있다고 생각한다. 그것은 여러 관계형 데이터베이스와 함께 작동하도록 설계되었습니다. 이 코드를 사용하려면 코드를 크게 변경해야 할 수 있습니다.

0

내 생각은 DB A와 B에서 두 테이블을 선택하는 쿼리를 작성한 다음 최대 절전 모드로 쿼리를 만들고이를 클래스에 매핑하는 것입니다.

예 : 작동 할 수

@Entity 
@NamedNativeQuery(
name="GetAllPerson", 
query="select * from A.Person inner join B.Person on A.Person.Id = B.Person.Id" 
) 
public class Person { 
... 
} 

확실하지 경우, 귀하의 질문은 : 그것을 할 수있는 최선의 방법에 대해 나 또한 궁금했다. 나는 오늘 밤 일을하고 나서 시험 할 것이고, 그것이 좋은 것인지 볼 것이다.

관련 문제