단방향 onetomany 매핑에 문제가 있습니다. 단방향 OneToMany 매핑 문제
User (
scode double precision NOT NULL,
...
CONSTRAINT utenti_pkey PRIMARY KEY (scode)
)
Rubrica (
id serial NOT NULL,
id_owner integer NOT NULL,
id_contact integer NOT NULL,
CONSTRAINT rubrica_pkey PRIMARY KEY (id),
CONSTRAINT rubrica_fk01 FOREIGN KEY (id_owner)
REFERENCES users (scode) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT rubrica_fk02 FOREIGN KEY (id_contact)
REFERENCES users (scode) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
사용자를 두 번 PKEY에 대해 신경 쓰지 마 : 나는 테이블 사용자 및 Rubrica을 얻었다. 그것은 고객의 테이블이며 수정할 수 없습니다. Rubrica는 소유자, 사용자 및 연락처, 사용자 집합 간의 관계를 저장합니다. 사용자는 다음과 같이 매핑됩니다 :
@SuppressWarnings("serial")
@Entity
@Table(name = "utenti", schema = "public")
public class User implements Serializable {
@Id
@Column(name = "scode", unique = true, nullable = false)
private Integer scode;
...
}
좋아. 여기 문제가 올 때입니다. 나는이 같은 Rubrica를 매핑하는 경우 :
public class Rubrica2 implements Serializable {
@Id
@Column(name = "id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_owner", nullable = false, unique = true, referencedColumnName = "scode")
private User owner;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name = "id_contact", nullable = false, updatable = false, insertable = true, referencedColumnName = "scode")
private Set<User> relations = new HashSet<User>();
...
}
JBoss는 배포에 나에게이 예외를 주었다
Caused by: org.hibernate.MappingException: Unable to find column with logical name: scode in org.hibernate.mapping.Table(public.rubrica) and its related
퍼 테이블과 보조 테이블
나는이 방법 Rubrica를 매핑하는 경우 :
public class Rubrica2 implements Serializable {
@Id
@Column(name = "id", nullable = false, unique = true)
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "id_owner", nullable = false, unique = true, referencedColumnName = "scode")
private User owner;
@OneToMany(fetch = FetchType.EAGER, mappedBy = "scode")
private Set<User> relations = new HashSet<User>();
...
}
을
런타임에 문제가 생겼습니다. 나는 이론이 onetomany 단방향에 대해 here를 지시에 따라
Hibernate: insert into public.rubrica (id_owner) values (?)
11:08:19,440 DEBUG [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (EJB default - 7)
ERROR: null values in column "id_contact" violates not-null constraint [n/a]: org.postgresql.util.PSQLException:
ERROR: null values in column "id_contact" violates not-null constraint
:이 코드
r = new Rubrica2();
q2.setParameter("id", ownerID);
User owner = (User) q2.getSingleResult();
r.setOwner(owner);
q2.setParameter("id", contactID);
User u = (User) q2.getSingleResult();
r.getRelations().add(u);
entityManager.persist(r);
를 실행하면 나는이 예외를 얻었다. JPA2.0, Hibernate4 (JBoss7.1.1.Final에서 제공) 및 PostgresSQL을 사용하고 있습니다.
클래스 이름 사용 사용자입니다? – Gayathri
@ 가야 트리 예. 업데이트되었습니다. – Francesco