一篇文章里边有多张图片,典型的单向一对多关系

多方

当程序运行到这一句的时候必然报错

但是参考书也是这样写的

其中em是

 EntityManager em = JPA.createEntityManager();

我本就是为了省事儿,采用的hibernate,结果你又让我用JPA这不是扯淡吗???/

经过两天的无脑研究

我发现一对多的情况,如果一方来控制,那么多方不能在实体中创建外键

也就是说,要这样做

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.hs.model; import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator; /**
*
* @author wishr
*/
@Entity
@Table(name = "t_imgs")
public class PreviewImg implements Serializable { private int id;
private String url; @Id
@GeneratedValue(generator = "_native")
@GenericGenerator(name = "_native", strategy = "native")
public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUrl() {
return url;
} public void setUrl(String url) {
this.url = url;
} }

多方代码

然后在一方进行保存的时候,多方自动保存,并且,多方的表,会自动增加一个属性,就是这个外键

service代码如下

public void captureAndSaveByZcjId(JTextArea jtaPreview, JTextArea jtaLog, int zcjId) {
ArticleDao articleDao = new ArticleDao();
Configuration cfg = new Configuration().configure();//实例化配置文件
ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
SessionFactory sf = cfg.buildSessionFactory(sr);//获取session工厂
Session session = sf.openSession();//生成一个新的session
session.beginTransaction();//开启事务
ZcjArticle zcjArticle = this.captureById(jtaPreview, jtaLog, zcjId);//远程文章大于本地文章才去刷
Article article = new Article();
article.setOldId(zcjArticle.getId());
article.setZcjPlateId(zcjArticle.getPlateId());
article.setColumnId(1);
article.setSectionId(1);
// int id = articleDao.save(session, article);//取回刚插入的数据的id
PreviewImg pi = new PreviewImg();
pi.setUrl("不为空就行");//测试用,随便写的
PreviewimgDao pd = new PreviewimgDao();
article.getPreviewImgs().add(pi);
articleDao.save(session, article);
session.getTransaction().commit(); //提交事务
session.close();//关闭session
sf.close();//关闭session工厂
}

为啥会出现这个错误,因为在一对一配置中,我也在被控的一方,写了一个外键,但是他并没有报错,大意

hibernate4一对多关联多方多写一次外键导致无法创建java.lang.NullPointerException以及Cannot add or update a child row: a foreign key constraint fails的更多相关文章

  1. Navicat MYSQL 建立关联表 保存时遇到 cannot add foreign key constraint

    首先建立user表,如下图 然后建立message表,userid用作外键,关联user表的id 点击上面的外键按钮,添加外键如下 结果保存时报错: cannot add foreign key co ...

  2. mariadb索引、视图、关联查询、备份恢复、外键

    连接查询(两张表关联查询) 在sql语句中,- - 代表注释 内关联查询(查询两张表的交集) select * from 表1 inner join 表2 on 表1.id=表2.id(此处id是表1 ...

  3. mysql表关联问题(第二卷:外键1对多之2)

    接着上一卷内容我们继续: 上卷我用的查询语句我们可以看到全部数据,很明显这样的方式查找的数据并不详细: SELECT * FROM usr LEFT JOIN fzu ON usr.fzu = fzu ...

  4. 一个7重嵌套表EF添加语句,注意子表赋值过程中只需写子表主键赋值,不需要写子表外键=父表主键。EF创建时会自动将子表外键设为与父表主键相等

    AIRPORT_HELIPORT tt = new AIRPORT_HELIPORT()            {                AIRPORT_HELIPORT_UUID = Gui ...

  5. mysql 外键关联

    mysql 外键关联 什么是外键:外键是一个特殊的索引,用于关联两个表,只能是指定内容. 如我将新建一个daka的表,然后将此表的class_id 与另外一个class的表的cid字段关联 class ...

  6. [MySql]MySql中外键设置 以及Java/MyBatis程序对存在外键关联无法删除的规避

    在MySql设定两张表,其中product表的主键设定成orderTb表的外键,具体如下: 产品表: create table product(id INT(11) PRIMARY KEY,name ...

  7. mysql由于外键关联无法删除数据

    在mysql中删除一张表时候,出现 Error No. 1451 Cannot delete or update a parent row: a foreign key constraint fail ...

  8. 注解:【基于外键的】Hibernate单向1->1关联

    Person与Address关联:单向1->1,[基于外键的] Person.java package org.crazyit.app.domain; import javax.persiste ...

  9. MySQL数据库 crud语句 ifnull() 创建新账户 备份数据库 一对多关系 多对多(中间表) 外键约束 自关联 子查询注意事项 DML DDL DQL mysql面试题 truncate与delete的区别

    DML(data manipulation language): 它们是SELECT.UPDATE.INSERT.DELETE,就象它的名字一样,这4条命令是用来对数据库里的数据进行操作的语言 DDL ...

随机推荐

  1. 转:Linux环境下段错误的产生原因及调试方法小结

    源地址:http://www.cnblogs.com/panfeng412/archive/2011/11/06/2237857.html 补充:http://baike.baidu.com/link ...

  2. Jan&Feb 工作总结

    一.工作任务: 熟悉dcbi项目(运维经分系统),完成指定需求. 熟悉bi项目(数据分析平台),完成指定需求. steel circus 主机游戏官网制作. 一拳超人游戏预注册页wap手机端制作. 二 ...

  3. 最近看了关于java的几条帖子,写的不错,总结了一下

    1.最开始写代码,例如C语言(“一次编写,到处编译”)都是经过编译后生成汇编码,直接在cpu上执行. 因为不同的硬件架构和操作系统,会导致不同的cpu支持的指令可能不同,也就是说不通类型的cpu所能执 ...

  4. 4_1.springboot2.xWeb开发使用thymeleaf

    1.简介 如果使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来: ...

  5. 《初识Python之认识常量type函数》

    <初识Python之认识常量type函数> 1.2 认识常量 1.常量:我们用的就是它字面意义上的值或内容. 2.数字(Number) (1)整数表示:97. (2)浮点数表示:5.29 ...

  6. assert(断言)

    Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常. 语法格式: assert expression 等价于: if not expression: ra ...

  7. [AHOI2014/JSOI2014]骑士游戏

    题目 思博贪心题写了一个半小时没救了,我也没看出这是一个\(spfa\)来啊 设\(dp_i\)表示彻底干掉第\(i\)只怪物的最小花费,一个非常显然的事情,就是对于\(k_i\)值最小的怪物满足\( ...

  8. sql server2014显示sa无法登录的错误

    博主用的是sql serser2014,不过这个问题的方法也适用于2012等其他版本. 当用sa登录的时候,提示如下错误: A connection was successfully establis ...

  9. webpack打包出错分析

    Module not found: Error: Can't resolve 'bundle.js' in 更改打包命令 webpack run1.js  -o bundle.js

  10. linux mysql备份shell

    #!/bin/bash # Shell script to backup MySql database # Author: Henry he # Last updated: -- # crontab ...