개인 및 인증 테이블간에 OneToOne 관계를 만들려고합니다. 문제는 DB 테이블 "Auth"가 생성 될 때, Person을 참조해야하는 AUTH 테이블에 외래 키가 보이지 않는다는 것입니다. 객체는 Auth 테이블에 Person 테이블의 동일한 기본 키를 사용하게하는 것입니다.HIbernate 일대일 주석이 종속 테이블에 외래 키 GerericGenerator를 생성하지 않습니다.
@MappedSuperclass
public abstract class DomainBase {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Long id;
@Version
@Column(name="OPLOCK")
private Integer version;
}
@Entity
@Table(name = "person")
public class Person extends DomainBase {
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="auth_id")
private Auth auth;
}
@Entity
public class Auth {
@Id
@GeneratedValue(generator="foreign")
@GenericGenerator(name="foreign", strategy = "foreign", parameters={
@Parameter(name="property", value="person")
})
@Column(name="person_id")
private int personId;
---------------------------------
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Person person;
}
최대 절전 모드 DB 생성 후 내 데이터베이스 스크립트.
CREATE TABLE auth
(
person_id integer NOT NULL,
activate boolean,
activationid character varying(255),
last_login_attempt_date timestamp without time zone,
last_login_attempt_timezone character varying(255),
last_login_date timestamp without time zone,
last_login_timezone character varying(255),
nonlocked boolean,
num_login_attempts integer,
CONSTRAINT auth_pkey PRIMARY KEY (person_id),
CONSTRAINT uk_d68auh3xsosyrjw3vmwseawvt UNIQUE (activationid)
)
WITH (
OIDS=FALSE
);
ALTER TABLE auth
OWNER TO postgres;
최대 절전 모드 설명서가 부족합니다. 무슨 기본 키를 공유로 onetone을 만드는가? 당신이 보여준 문서들에서 나는 그것이 무엇이되는지를 보지 못했습니다. 설명 할 수 있니? – Dean
"공유 기본 키"로, 나는 단지 그들 사이의 관계를 허용하기 위해 다른 테이블의 외래 키와 같은 테이블의 ID를 사용하는 것을 의미합니다. 나는 "공유"라는 용어를 사용하지 말았어야했다. 내 대답을 편집 – EPerrin95
그 구성으로, 나는이 오류를 얻고 있습니다 ->이 일을 시도 할 때 null 일대일 특성 [XXXXX.domains.Auth.person]에서 ID를 할당하려고 시도했습니다 (http : // pastie.org/9315522) – Dean