2010-05-24 3 views
2

동일한 엔티티 클래스를 사용하여 이전 테이블의 테이블 항목을 새 테이블 항목으로 변환하는 방법이 있습니까? 이 시도하는 경우, 충돌약간 다른 테이블을 변환하는 방법?

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Basic(optional = false) 
@Column(name = "benutzer_id") 
private Integer benutzerId; 
@Basic(optional = false) 
@Column(name = "benutzer_name") 
private String benutzerName; 
@Column(name = "benutzer_vorname") 
private String benutzerVorname; 
@Column(name = "benutzer_nachname") 
private String benutzerNachname; 
@JoinColumn(name = "gruppe_id", referencedColumnName = "gruppe_id") 
@ManyToOne(optional = false) 
private Gruppe gruppe; 
@OneToMany(mappedBy = "benutzer") 
private Collection<Bestellung> bestellungen; 

열 "benutzer_vorname"와 "benutzer_nachname"이전 테이블에서 누락되어 있으므로 최대 절전 모드 :

하는 선택은 특정하기 위해, 여기 내 엔티티 클래스의 새 테이블에 대한 주석입니다 테이블 엔트리를 매핑한다.

새로운 엔티티 클래스를 만들어야합니까, 아니면 기존의 엔티티 클래스를 사용하여 데이터를 변환 할 수 있습니까?

+0

하지만 ... 오래된 테이블은 머무를 예정입니까? "변환"을 위해 JPA를 사용해야합니까? –

+0

아니, 머물지 않을거야. 코드 작성이 더 쉽기 때문에 JPA 사용을 선호합니다. – punischdude

+0

JPA 사용은 문제가되지 않지만 그 작업에는 적합하지 않습니다. 원시 sQL 스크립트를 사용하여 이전 테이블의 데이터를 새 테이블로 마이그레이션하지 않는 이유는 무엇입니까? 그것은 직업을위한 최고의 도구가 될 것입니다. 내가 놓친 게 있니? –

답변

1

새 엔티티 클래스를 만들어야합니까, 아니면 기존 엔티티 클래스를 사용하여 데이터를 변환 할 수 있습니까?

두 개의 테이블에 엔티티를 매핑 할 수 없습니다. 여기서는 JOIN 상속 전략에 대해 설명하지 않습니다. 따라서 새 엔티티를 만들어야합니다.

1

하나의 테이블 구조에서 다른 테이블 구조로 마이그레이션하는 방법을 고려한다면, 최대 절전 모드가 최상의 솔루션이 아닐 수도 있습니다.

테이블이 플랫 (연결 없음)이면 SQL을 사용하여 항목을 복사하는 것이 정말 쉽습니다. 필요한 데이터를 선택하여 새 테이블에 직접 삽입 할 수 있습니다 (DBMS에 따라 구문이 다를 수 있으며 문제가 될 수 있음).

INSERT INTO new_table (
    column1, 
    column2, 
    column3 
) 
SELECT 
    column1 as "Copied value for new entity", 
    'a default' as "Default value for new entity", 
    some_column * 3 as "Computed Value for new entity" 
FROM 
    new_table; 

선택 열 별칭은 물론 선택 사항은 다음과 같이

표준 SQL에서 당신은 그냥 당신이 할 수있는 다양한 것들에 대한 코멘트로 사용했습니다,이 작업을 수행 할 수 있습니다.

평평하게하려는 복잡한 테이블 구조가있는 경우 삽입하려는 행 집합을 반환하는 한 복잡한 쿼리를 수행 할 수 있습니다.

+0

문제는 테스트 목적으로 여러 번 "마이그레이션"해야한다는 것입니다. – punischdude

+0

최대 절전 모드로 구성한 데이터 소스를 통해 SQL을 실행할 수 있습니다. 대신'session.createSQLQuery ("SELECT ...") .list();를 사용하십시오. – Geoff

관련 문제