데이타베이스 구조로 인해 조인 열이 기본 클래스의 기본 키가 아닌 ORM 클래스 계층의 객체에 조인 테이블에 문제가 있습니다. 다음은 테이블 디자인의 예입니다 : 여기비 기본 키 열의 테이블을 조인하려면 어떻게합니까?
CREATE TABLE "SCH"."FOO"
(
"OWNERID" NUMBER(10,0) NOT NULL ENABLE,
"FOOID" NUMBER(10,0) NOT NULL ENABLE,
CONSTRAINT "FOO_PK" PRIMARY KEY ("OWNERID", "FOOID")
CONSTRAINT "FOO_FK1" FOREIGN KEY ("OWNERID") REFERENCES "SCH"."OWNERS" ("OWNERID") ENABLE
)
CREATE TABLE "SCH"."BAR"
(
"BARID" NUMBER(10,0) NOT NULL ENABLE,
"FOOID" NUMBER(10,0)
CONSTRAINT "BAR_PK" PRIMARY KEY ("BARID")
)
그리고는 (unesessary 정보] 제거)
@Entity
@IdClass(FooId.class)
@Table(name = "FOO")
public class Foo implements java.io.Serializable
{
@Id
@Column(name = "OWNERID")
private BigInteger ownerId;
@Id
@SequenceGenerator(name = "FOO_GENERATOR", sequenceName = "SEQ_FOO")
@GeneratedValue(generator = "FOO_GENERATOR")
@Column(name = "FOOID")
private BigInteger id;
@OneToMany(fetch = FetchType.LAZY)
@JoinColumn(name = "FOOID", referencedColumnName = "FOOID")
@Fetch(value = FetchMode.SUBSELECT)
@Cascade(value = {CascadeType.ALL})
private Set<Bar> bar = new LinkedHashSet<Bar>(0);
}
@Entity
@Table(name = "BAR")
public class Bar implements java.io.Serializable
{
@Id
@Column(name = "BARID")
private BigInteger id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "FOOID", referencedColumnName = "FOOID")
private Foo foo;
}
이 예외와 함께 실패 매핑은 다음과 같습니다
Caused by: org.hibernate.AnnotationException: referencedColumnNames(FOOID) of com.package.Bar.foo referencing com.package.Foo not mapped to a single property
at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:204)
at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:114)
at org.hibernate.cfg.Configuration.processEndOfQueue(Configuration.java:1580)
at org.hibernate.cfg.Configuration.processFkSecondPassInOrder(Configuration.java:1503)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1419)
at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1375)
수 당신하시기 바랍니다 솔루션에 대한 도움이 필요하십니까? 다음과 같이 U 할 수
com.package.Bar.foo를 참조하는 com.package.Foo를 참조하는 referencedColumnNames (FOOID)가 하나의 속성에 매핑되지 않았습니다. – Dzmitry
이것은 최대 절전 모드 버그입니다. https://hibernate.onjira.com/browse/HHH-4284를 참조하십시오. OTOH, FOOID가 고유성을 보장하기에 충분하기 때문에 소유자 ID에서 @Id 주석을 간단히 제거 할 수 없었습니까? –
@ Id 주석을 소유자 ID에서 제거하고 @ IdClass를 제거하는 것은 예상대로 작동하지 않지만 어떻게 든 작동합니다. 게시물을 다른 답변으로 보내 주시면 솔루션으로 받아 들일 수 있습니까? 고맙습니다. – Dzmitry