我有一个实体,它的复合主键由两个字段组成,其中一个也是复合外键的一部分。
背景:我有实体<代码>人员 、<代码>区域 和<代码>会话 。
人员
与区域和
会话
具有多对多关系,使用称为人员区域
“和”人员会话“的联接
实体。
所以,我有人员会话
,主键为(人员 Id
,会话 ID
)。“人员标识
”和“会话 Id”
本身是“人员和
会话”
的外键。
角色会话
也有一个字段areaId
。我希望(角色ID
,areaId
)是角色区域
的复合外键。
我的PersonSession代码:
@Entity
@Table(name="person_session")
@IdClass(PersonSession.ID.class)
public class PersonSession {
@Id
private int personId ;
@Id
private int sessionId;
@ManyToOne
@JoinColumn(name = "personId", updatable = false, insertable = false, referencedColumnName = "id")
private Person person;
@ManyToOne
@JoinColumn(name = "sessionId", updatable = false, insertable = false, referencedColumnName = "id")
private Session session;
@ManyToOne//(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "personId", updatable = false, insertable = false),
@JoinColumn(name = "areaId", updatable = false, insertable = false),
})
private PersonArea personArea;
}
PersonSession.Id 代码
public static class ID implements Serializable {
private int personId;
private int sessionId;
}
这看起来不错,它在数据库中创建了所有正确的关系。当我尝试插入个性化会话对象时,问题就出现了——areaId列总是空的,我想这是因为它定义了一个updatable=false, addtable=false
。
但是,如果我试图使它可更新和可插入,我会得到一个异常,抱怨personId是一个重复的列:
Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: foo.bar.PersonSession column: personId (should be mapped with insert="false" update="false")
我怎样才能拥有所需的关系并使areaId可更新和可插入?
我知道我迟到了,但是我面临着同样的问题,我使用@JoinColumnsOrFormulas来解决它。你可以这样做:
@JoinColumnsOrFormulas(value = {
@JoinColumnOrFormula(column = @JoinColumn(name="personId", referencedColumnName = "personId")),
@JoinColumnOrFormula(formula = @JoinFormula(value="areaId", referencedColumnName = "areaId"))})
private PersonArea personArea;
我应该能够用这个做我想做的事:
@ManyToOne//(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "personId"),
@JoinColumn(name = "areaId", updatable = false, insertable = false),
})
private PersonArea personArea;
但Hibernate不支持混合使用可更新和不可更新的联接列。这个问题的公认答案表明,它可能会在某个时候得到支持,但开发人员似乎并不十分担心这个缺点。
我有如何抛弃冬眠,转而支持日食链接,它的工作原理!
我有两个表: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
我在oracle数据库中有一个包含客户数据的表。以下是一个简化的定义: 此表的主键是。 该表有许多行,其中为空。在数据库级别,没有问题,但是当我试图通过JPA实体访问这些行时,会导致一些问题: 1:使用
问题 如果我像下面的例子一样使用属性访问类型,我是否也必须为引用的FK定义getter和setter? 我不认为是这样,但Java EE6的官方文档是这样做的。 null
我为这个特殊的问题找了很多,但我没有找到任何具体的解决办法。我在一个表中有一个复合主键,这个复合主键的一个字段是另一个表的复合主键的一部分。您可以说这个特定的字段是第二个表中的外键,但是在表定义中没有定义任何独占外键约束。对于第一个表中的每个rec,第二个表中可能有多条记录。我试图使用SPringBoot-JPA-Hibernate实现这一点,但无法实现。有人能帮我吗。以下是德泰:- 我有一个US
我的数据库是: 我们可以在Table2中为Table1中的1设置多行。 我的TABLE1实体是: 我的Table1Id类是: 我的TABLE2实体是: 我的Table2Id类是: 当我尝试启动我的tomcat时,我有以下错误: 我尝试使用引用列,主键连接列和许多其他东西,但是通过在互联网上阅读它,它可以解决数据库建模问题。我认为问题是主键和外键在2个表中具有相同的名称,但我可能是错的......我
问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域