우리는 관계형 데이터베이스에 대한 직접 쿼리를 사용하여 오늘부터 개발 된 웹 응용 프로그램에 Hibernate를 통합하고 있습니다. 우리는 읽기 및 쓰기를 위해 최대 절전 모드를 통해 데이터베이스에 액세스하기 위해 모든 엔티티와 매핑을 구현하기 위해 hbm.xml 파일을 생성했습니다.외래 키 compiste 기본 키 (중복 열 오류)
우리 스키마에는 많은 복합 기본 키가 있으며, 그 때문에이 복합 ID를 참조하는 많은 외래 키가 있습니다.
위에서 우리는 많은 문제가있는 데이터베이스 스키마의 예를 볼 수 있습니다.
<class name="Profile" table="Profile" optimistic-lock="version">
<id name="profileId" type "java.lang.Integer">
<column name="profileId" />
<generator class="assigned" />
</id>
<many-to-one name="location" class="Location" fetch="select" >
<column name="locationId" length="3" not-null="true" />
</many-to-one>
<many-to-one name="users" class="Users" fetch="select">
<column name="locationId" length="3" not-null="true" />
<column name="userId" length="30" not-null="true" />
</many-to-one>
<many-to-one name="groupUsers" class="GroupUsers" fetch="select">
<column name="locationId" length="3" not-null="true" />
<column name="groupUserId" length="30" not-null="true" />
</many-to-one>
</class>
<class name="Users" table="Users" optimistic-lock="version">
<composite-id name="id" class="UsersId">
<key-property name="locationId" type="string">
<column name="locationId" length="3" />
</key-property>
<key-property name="userId" type="string">
<column name="userId" length="30" />
</key-property>
</composite-id>
<set name="profiles" table="Profile" inverse="true" lazy="true" fetch="select">
<key>
<column name="locationId" length="3" not-null="true" />
<column name="userId" length="30" not-null="true" />
</key>
<one-to-many class="Profile" />
</set>
</class>
<class name="GroupUsers" table="GroupUsers" optimistic-lock="version">
<composite-id name="id" class="GroupUsersId">
<key-property name="locationId" type="string">
<column name="locationId" length="3" />
</key-property>
<key-property name="groupUserId" type="string">
<column name="groupUserId" length="30" />
</key-property>
</composite-id>
<set name="profiles" table="Profile" inverse="true" lazy="true" fetch="select">
<key>
<column name="locationId" length="3" not-null="true" />
<column name="groupUserId" length="30" not-null="true" />
</key>
<one-to-many class="Profile" />
</set>
</class>
<class name="Location" table="Location" optimistic-lock="version">
<id name="locationId" type="string">
<column name="locationId" length="3" />
<generator class="assigned" />
</id>
<set name="profiles" table="Profile" inverse="true" lazy="true" fetch="select">
<key>
<column name="locationId" length="3" not-null="true" />
</key>
<one-to-many class="Profile" />
</set>
</class>
Tomcat을 시작할 때 나는 다음과 같은 오류 얻을 : "프로필 열 : (삽입 = 매핑해야 locationId를 =" "갱신"거짓 거짓 ")"
hbm.xml 파일도 있습니다하지만이 Profile.hbm.xml 파일의 대일 관계에서이 두 가지 속성을 넣어하려고하면, 나는 데이터베이스에 (영향) 프로파일 인스턴스를 삽입 할 수 없습니다 :
<many-to-one name="location" class="Location" fetch="select" insert="false" update="false">
<column name="locationId" length="3" not-null="true" />
</many-to-one>
<many-to-one name="users" class="Users" fetch="select"insert="false" update="false">
<column name="locationId" length="3" not-null="true" />
<column name="userId" length="30" not-null="true" />
</many-to-one>
<many-to-one name="groupUsers" class="GroupUsers" fetch="select" insert="false" update="false">
<column name="locationId" length="3" not-null="true" />
<column name="groupUserId" length="30" not-null="true" />
</many-to-one>
을 아무도 도와 줄 수 없니?
대단히 감사합니다.
왜 'locationId'가 Users 및 GroupUsers의 기본 키의 일부입니까? 그게 당신의 문제의 근원이라고 생각합니다. 다중 매핑을 위해 복합 키의 일부로 같은 열을 사용하려고합니다. 그런데 왜 이렇게할까요? 자신의 위치 만 구별되는 동일한 'userId'를 가진 여러 사용자를 갖게 될 것입니까? – dcsohl
Google에서 'create hbm.xml'오류는 insert = "false"update = "false"'와 매핑되어야합니다. 예 : [one-to-many FK에서도 사용되는 composite-id key-property에 "insert = 'false'update = 'false'"를 어떻게 매핑 할 수 있습니까?] (https://stackoverflow.com/q/4892925/3404097). – philipxy