JPA 2,Hibernate 4。
从数据库视图创建实体。我很难让这两个实体正确地映射。我有一个具有复合键的父实体和一个具有单个值键的子实体。
两者之间的关系由具有父级复合键的一部分的子实体定义。试图将两者联系起来。
复合键类
@Embeddable
public Class ParentID implements Serializable {
private static final long serialVersionUID = 1L;
private long keyIdOne;
private String keyIdTwo;
....
}
@Entity
public class Parent {
@EmbeddedId
protected ParentID id;
....
@OneToMany
private List<Child> childList;
}
@Entity
public class Child {
@Id
private long Id;
private long keyIdOne //FK to part of the parentId composite key
.....
@ManyToOne
private Parent parent;
}
@ManyToOne
@JoinColumn(name="keyIdOne", referencedColumnName="keyIdOne")
private Parent parent;
任何帮助都是非常感谢的。
我认为这个问题的问题在于PK-FK(主键-外键)约束。
总之:
Parent:
| keyIdOne | keyIdTwo |
|----------|----------|
| 1 | a |
| 1 | b |
| 3 | a |
Child:
| id | keyIdOne |
|----|----------|
| 2 | 1 |
| 3 | 3 |
外键必须引用它所引用的表(http://en.wikipedia.org/wiki/foreign_key)中的一行。如果子级的keyidone=1
引用父级中的哪一行Child.keyidone
?
Parent:
| keyIdOne |
|----------|
| 1 |
| 3 |
Child:
| keyIdOne | keyIdTwo |
|----------|----------|
| 1 | a |
| 1 | b |
| 3 | a |
在这种情况下,您可以使用以下方法将子项的复合键的一部分映射到父项:
@MapsId("keyIdOne")
private Parent parent;
@Mapsid只在OnetoOne和ManyToOne中工作(http://docs.oracle.com/javaee/6/api/javax/persistence/mapsid.html)
我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。 背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。 与具有多对多关系,使用称为“和实体。 所以,我有,主键为(,)。本身是的外键。 也有一个字段。我希望(,)是的复合外键。 我的PersonSession代码: } 这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——ar
我有两个表:A和B,都有一个复合主键。表B的PK也是表a主键的外键。 当我试图获取映射表B的类的实例时,我得到了以下异常: org.hibernate.TypeMismatchException 这两个类都位于package:com.cairone.ejemple01.entities 完整的日志输出为: 2016-09-21 12:28:24.505错误8568--[main] O.S.Boot
我有一个JPA实体的类层次结构,基类是定义了一个ID的MappedSuperclass。我试图在子类中使用复合键,但这似乎不起作用
我的数据库是: 我们可以在Table2中为Table1中的1设置多行。 我的TABLE1实体是: 我的Table1Id类是: 我的TABLE2实体是: 我的Table2Id类是: 当我尝试启动我的tomcat时,我有以下错误: 我尝试使用引用列,主键连接列和许多其他东西,但是通过在互联网上阅读它,它可以解决数据库建模问题。我认为问题是主键和外键在2个表中具有相同的名称,但我可能是错的......我
我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用
我有2个表,即user和user_session。
问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域
异常[EclipseLink-48](Eclipse Persistence Services-2.3.2.v20111125-r10461):org.Eclipse.Persistence.exceptions.Description异常描述:字段[flight.connid]存在多个可写映射。只有一个可以定义为可写,所有其他的都必须指定为只读。映射:org.eclipse.persistenc