我正在尝试我们非主键作为外键在我的应用程序。场景如下:我有EMPLOYEE和EMPLOYEE_PROPERTIES表。Employee和Employee属性之间存在一对多的关系。下面是我的架构:
create table employee(
fname varchar2(100) not null,
lname varchar2(100) not null,
emp_id number not null
);
ALTER TABLE employee ADD constraint employee_pk PRIMARY KEY (fname, lname);
alter table employee add constraint employee_uniue unique (emp_id);
create table employee_property(
emp_prop_id not null,
emp_id number not null,
property_name varchar2(100) not null,
property_value varchar2(100) not null
);
ALTER TABLE employee_property ADD constraint employee_property_pk PRIMARY KEY (emp_prop_id);
ALTER TABLE employee_property ADD CONSTRAINT emp_prop_fk FOREIGN KEY (emp_id) REFERENCES employee(emp_id);
下面是我的hibernate映射XML:-------------------------------
<hibernate-mapping>
<class name="com.persistence.vo.Employee" table="EMPLOYEE">
<composite-id>
<key-property name="fName" column="FNAME"/>
<key-property name="lName" column="LNAME"/>
</composite-id>
<property name="empId" type="long" access="field" unique="true">
<column name="EMP_ID" />
</property>
<set name="employeeProperties" table="employee_properties" lazy="false"
fetch="select" cascade="save-update, delete-orphan">
<key>
<column name="emp_id" not-null="true"/>
</key>
<one-to-many entity-name="com.persistence.vo.EmployeeProperty"/>
</set>
</class>
</hibernate-mapping>
-------------员工属性-------------------
<hibernate-mapping>
<class name="com.persistence.vo.EmployeeProperty" table="EMPLOYEE_PROPERTY">
<id name="empPropId" type="long">
<column name="EMP_PROP_ID" />
<generator class="assigned" />
</id>
<many-to-one name="employee" class="com.persistence.vo.Employee" fetch="select">
<column name="empId" not-null="true"/>
</many-to-one>
<property name="propertyName" type="java.lang.String">
<column name="PROPERTY_NAME" />
</property>
<property name="propertyValue" type="java.lang.String">
<column name="PROPERTY_VALUE" />
</property>
</class>
</hibernate-mapping>
public class Employee {
private long empId;
private String fName;
private String lName;
private Set<EmployeeProperty> employeeProperties;
}
public class EmployeeProperty {
private long empPropId;
private Employee employee;
private String propertyName;
private String propertyValue;
}
是否可以引用非主键作为外键?
我被你的地图弄糊涂了。Employee到EmployeeProperty是一对多的,但EmployeeProperty中的emp_id在映射中标记为此实体的ID字段(即PK,唯一列)?
您有多种选项:
[1]向EmployeeProperty添加另一个字段以充当ID,例如emp_property_id
问题内容: 我在为某些实体设置jpa映射时遇到麻烦。我有一个如下定义的父实体。 然后,我有一个带有复合键的子实体,以及此表的主键的外键,如下所示: 我知道子实体不正确,但是我不确定如何将其设置为具有复合PK。我知道我需要设置一个PK类,但是当一个字段是父类的外键时,我不确定该怎么做。一旦设置好,父级将如何引用子级实体? 任何帮助表示赞赏。 问题答案: 这受JPA 2规范的 第2.4.1节“与派生身
我是hibernate新手,我遇到了以下问题。“唯一索引或主键冲突”。问题的出现是由于错误的映射,但我花了几个小时来找出为什么会发生这种情况。 我有一个超级类叫做数据结构 然后是关联两个元素的类关联。这里省略了类的某些部分,只是为了简化它。 这个类作为两个数据结构类型类之间的中间类。像这样。 TP-协会-TP TP等级: 或者激活类 总的来说,我增加了以下内容: 当我尝试添加相同的对象时,问题就出
b)对Employee类中的ReferencedColumnName='department id'使用@ManyToOne和@JoinColumn。 建议采用哪种方法?还是这两种方法用于完全不同的问题?
Hi编写Spring应用程序,使用Spring Security。这是我的用户和帐户角色数据库: 我的实体类: 当我尝试登录我的系统我有错误: Hibernate:选择userrolese0_. username作为username3_1_0_,userrolese0_. id作为id1_0_0_,userrolese0_. id作为id1_0_1_,userrolese0_. name作为nam
问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那