我有两个实体,它们之间有一对一的联系。这两个实体都具有复合自然主键。一个实体使用其自然组合键中的1个字段和一个额外列引用另一个实体。我在持久化这些实体方面有问题,Hibernate首先插入引用对象(根据我的理解,这是HallPlacesSchema),因此在插入引用对象之前,我立即得到约束违反错误(Hall)。
CREATE TABLE webgatemarket_TssHallPlacesSchema (
TSSHALLPLACESSCHEMAID INTEGER NOT NULL,
WEBGATEMARKET_ID INT(11) UNSIGNED NOT NULL,
TSSHALLID INTEGER NOT NULL,
PRIMARY KEY (TSSHALLPLACESSCHEMAID, WEBGATEMARKET_ID),
FOREIGN KEY (WEBGATEMARKET_ID, TSSHALLID) REFERENCES webgatemarket_TssHall(WEBGATEMARKET_ID, TSSHALLID),
FOREIGN KEY (WEBGATEMARKET_ID) REFERENCES webgatemarkets (cinema_id),
INDEX (WEBGATEMARKET_ID, TSSHALLPLACESSCHEMAID)
) ENGINE =InnoDB, DEFAULT CHARSET =utf8;
CREATE TABLE webgatemarket_TssHall (
TSSHALLID INTEGER NOT NULL,
WEBGATEMARKET_ID INT(11) UNSIGNED NOT NULL,
PRIMARY KEY (TSSHALLID, WEBGATEMARKET_ID),
FOREIGN KEY (WEBGATEMARKET_ID) REFERENCES webgatemarkets (cinema_id)
) ENGINE =InnoDB, DEFAULT CHARSET =utf8;
public class DataObjectPk implements Serializable
{
@Id
private int id;
@ManyToOne
@JoinColumn(name = "WEBGATEMARKET_ID")
private WebGateMarketDO webGateMarket;
}
@IdClass(DataObjectPk.class)
public class Hall
{
@Id
@Column(name = "TSSHALLID")
private int id;
@ManyToOne
@JoinColumn(name = "WEBGATEMARKET_ID")
private WebGateMarketDO webGateMarket;
@OneToOne(mappedBy = "hall")
private HallPlacesSchema hallPlacesSchema;
}
@IdClass(DataObjectPk.class)
public class HallPlacesSchema extends DataObject
{
@Id
private int id;
@ManyToOne
@JoinColumn(name = "WEBGATEMARKET_ID")
private WebGateMarketDO webGateMarket;
@Column(name = "TSSHALLID")
private Integer hallId;
@OneToOne
@JoinColumns({
@JoinColumn(name = "TSSHALLID", referencedColumnName = "TSSHALLID", insertable = false, updatable = false),
@JoinColumn(name = "WEBGATEMARKET_ID", referencedColumnName = "WEBGATEMARKET_ID", insertable = false, updatable = false)
})
private Hall hall;
}
在单个会话中,我完全按照该顺序坚持霍尔,然后是霍尔广场化学时,问题就出现了。
entityManager.persist(halls);
entityManager.persist(hallPlacesSchemas);
entityManager.flush();
当会话刷新时,我看到Hibernate首先INSERTs HallPlacesSchema对象,所以我立即得到约束违反错误:无法添加或更新子行:外键约束失败……
有人能帮助我理解这是为什么吗?
Hibernate:
/* insert HallPlacesSchema
*/ insert
into
webgatemarket_TssHallPlacesSchema
(DELFLAG, UPDATENUM, TSSHALLPLACESCHEMA_BACKGROUND, TSSHALLID, TSSHALLPLACESCHEMA_HEIGHT, TSSHALLPLACESCHEMA_ISDEFAULT, TSSHALLPLACESCHEMA_NAME, TSSHALLPLACESCHEMA_PLACE_HEIGHT, TSSHALLPLACESCHEMA_PLACE_WIDTH, SAREAID, TSSHALLPLACESCHEMA_SCALE_FACTOR, TSSHALLPLACESCHEMA_SECTORS_COUNT, TSSHALLPLACESCHEMA_WIDTH, TSSHALLPLACESSCHEMAID, WEBGATEMARKET_ID)
values
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
2014-06-28 22:31:39,126 WARN [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] : SQL Error: 1452, SQLState: 23000
2014-06-28 22:31:39,126 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] : Cannot add or update a child row: a foreign key constraint fails.....
请忽略我的问题,在我的测试类中有一个错误,导致首先插入霍尔广场化学。
问题内容: 我有一对一的关系,但是hibernatetool在生成模式时抱怨。这是显示问题的示例: 人与OtherInfo具有一对一关系: 人是OtherInfo的拥有方。OtherInfo是拥有方,因此person用于在Person中指定属性名称“ otherInfo”。 使用hibernatetool生成数据库架构时出现以下错误: 知道为什么吗?我是在做错什么还是这是Hibernate错误?
我在hibernate中搜索建立关系的各种可能性,遇到了下面的代码片段
无法添加或更新子行:外键约束失败(.,约束外键()引用()) 如果我删除,insert操作将会很好地工作。在将对象插入数据库之前,我检查了这些对象,并确保包含,包含。 用于创建和的SQL脚本为: Hibernate:创建表b(b_id integer not null auto_increment,string_results longtext,a_id integer,主键(b_id)) Hib
救命啊!我只在一对多关系数据库中插入POJO时遇到问题。我有POJO和误解如何插入数据库中的所有列表??? 请帮帮我伙计们!
我正在学习冬眠,只是有点困惑。
我有一个springboot应用程序,其中我有一个postgres数据库,里面有一个电影院列表: 这些影院中的每一个都显示一部或多部电影(在另一个数据库中)。我创建了一个关系表: 在最后一个表中,cinema_id是链接到cinemas表中id的外键。movie_id只是一个表示另一个数据库中的id的整数。 我的实体表示形式: 当我试着去看属于个人影院的电影时,问题就来了: null 我做错了什么