2013-05-15 5 views
0

두 엔티티 사이에 다 대일 관계가 있습니다. 많은 B 개체는 A 개체와 관련이 있습니다. 내 B 테이블에는 A_ID 열이 있습니다. 일부 상황에서는 A_ID 인 B 엔티티가있을 수 있지만 A의 행과는 관련이 없습니다. 이상적인 것은 아니지만 이전 시스템의 일부이므로이 부분을 만질 수는 없습니다. 암호.ID와 외부 엔티티에 대한 JPA/Hibernate 엔티티에 대한 설정자가 필요합니다.

적절한 Hibernate 엔티티를 사용하면 B의 setA() 메소드와 B의 getAs().add() 메소드를 사용하여 연결할 A 엔티티가있을 때 B 엔티티를 추가 할 수 있습니다. A 엔터티 (B의 A_ID = 10, 예를 들어 ID = 10이없는 A가없는 위치)와 연결된 B 엔터티를 추가하려는 경우를 다루는 방법이 없습니다. 이것이 가능합니까 아니면이 시점에서 엔티티 계층 구조를 깨뜨리고 수동으로 처리해야합니까?

setAId()을 B 엔티티에 추가하고 해당 방법 또는 setA() 방법 중 하나만 사용할 수 있습니까? 최대 절전 모드가 허용할까요? 코드를 제공하지 않는

MyHibernateException: Hibernate SessionFactory creation failed, hibernateCfgFileNm=hibernate.xml 
... 
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: test.B column: A_ID (should be mapped with insert="false" update="false") 

죄송합니다 : 나는 B에 getter와 setter를 추가하려고하면, 나는 다음과 같은 오류가 발생합니다. 이 설명이 충분하다고 생각하지만 코드가 필요한 경우 추가 할 수 있습니다.

답변

0

엔티티 관계에 대한 내 이해와 함께 (표준 JPA @ManyToOne/@OneToMany 관계를 맵핑한다고 가정합니다.) 여기 재미있는 문제가 발생할 것입니다.

나는 시퀀스 ID를 생성하여 내 엔티티를 생성하고, 기존 시스템에서 A_ID를 수행하지만 아무것도하지 않는 '자리'A 엔티티 허용합니다. 모든 A 엔티티가 완전한 엔티티가되는 것은 아니며 (위에서 언급 한 A_ID를 그대로 유지할 수있는 것은 아닙니다) 코드를 인식하고 정상적으로 처리하는 ID를 가진 A 엔티티를 항상 제공 할 수 있도록 정상적으로 처리 할 수 ​​있습니다. .

관계를 동일한 열에 매핑하고 문제가있는 관계없이 열에 값을 설정할 수 있다고 생각하지 않습니다. 아마도 관계를 LAZY으로 가져 와서 예외를 catch하면 이는 존재하지 않는 엔티티 A를 해결하려고 할 때 발생합니다. 또한 작동 할 수도 있습니다.이 경우 관계 열을 읽기 전용 (insert="false"update="false")으로 매핑하고 setAId(id)으로 모든 작업을 수행하십시오. setA(A) 메소드는 관리되는 콜렉션이 아닌 ID에서만 작동해야 할 수도 있습니다. 콜렉션을 읽는 것은 본질적으로 관련된 모든 행을 가져올 것이기 때문입니다.

레거시 ID의 의미가 '여기에서이 ID는 null 개체 일 수 있습니다.'라고 느슨하게 해석되는 경우 가장 좋은 방법은 레거시 시스템의 ID에서 분리하는 것입니다.

관련 문제