у меня есть две родительских таблиц и одну таблицы ребенка, с нижеперечисленным композитом ключа:Hibernate One To One картирования, с одним ребенком и два родительских таблицами
Employee:
employeeId1 (PK)
employeeId2 (PK)
employeeName
---some other columns go here----
Student:
studentId1 (PK)
studentId2 (PK)
studentName
---some other columns go here----
Address:
addressId (PK)
addressPersonId1 (PK & FK)
addressPersonId2 (PK & FK)
---some other columns go here----
сотрудников и студенты могут иметь тот же адрес, так Employee и Студент может ссылаться на ту же запись в адресе.
Это не реально таблицу, у меня есть в моем приложении, но структура остается тем же, Я не могу изменить структуру таблицы любой ценой.
Я хочу достичь отношений «один к одному» между (Employee, Address) и (Student, Address). Поскольку количество столбцов PK и имен столбцов PK не одинаково, я не могу создать отношения.
Каков подход для указания столбцов в адресе (addressPersonId1, addressPersonId2) в качестве основного и Forign-ключа. И как я могу обращаться к этим видовым клавишам из файлов родительского hbm.
**I have to establish mapping using HBM files but not hibernate or JPA annotations.**
**Is there any way to specify forign key column names in One to One tag in hbm file.**
Заранее благодарим за любые предложения и решения.
Employee.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.Employee" table="EMPLOYEE">
<composite-id name="employeePK" class="com.model.EmployeePK">
<key-property name="employeeId" column="EMPLOYEE_ID" />
<key-property name="employeeName" column="EMPLOYEE_NAME" />
</composite-id>
<property name="employeeStatus" type="string">
<column name="EMPLOYEE_STATUS" />
</property>
<one-to-one name="address" class="com.model.Address"
cascade="all">
</one-to-one>
</class>
</hibernate-mapping>
Student.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.Student" table="STUDENT">
<composite-id name="studentPK" class="com.model.StudentPK">
<key-property name="studentId" column="STUDENT_ID" />
<key-property name="studentName" column="STUDENT_NAME" />
</composite-id>
<property name="studentStatus" type="string">
<column name="STUDENT_STATUS" />
</property>
</class>
</hibernate-mapping>
Address.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.model.Address" table="ADDRESS">
<composite-id name="addressPK" class="com.model.AddressPK">
<key-property name="addressId" column="ADDRESS_ID" />
<key-property name="addressPersonId" column="ADDRESS_PERSON_ID" />
<key-property name="addressPersonName" column="ADDRESS_PERSON_NAME" />
</composite-id>
<property name="addressStatus" type="string">
<column name="ADDRESS_STATUS" />
</property>
</class>
</hibernate-mapping>
В случае один ко многим, можно указать имена отображение столбцов в родительский HBM файл, как ** <имя столбца = «column1» не-NULL = «истинный» /> имя <столбец = «COLUMN2» not-null = "true" /> ** Можно ли указать это в отношениях один к одному. –
' <имя-join name =" ADDRESS_ID "/> ' '' имя_соединения = = ADDRESS_ID "/>' является вашим внешний ключ в другой таблице –
Angga
Позвольте мне попробовать ... –