多对一关系在删除子对象时,它会抛出异常 [英] Many to One Relationship While removing child object it's throwing exception

查看:130
本文介绍了多对一关系在删除子对象时,它会抛出异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用JPA进行多对一关系。从Child表中删除子对象时,它会抛出异常。

I am doing Many To One relationship using JPA . While deleting child object from Child table it's throwing exception.

下面是我的代码:

Project.java

Project.java

  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name="id")
  private int id;
  @Column(name="projectName")
  private String projectName;
  @Column(name="projectDesc")
  private String projectDesc; 

  @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
  @JoinColumn(name="companyId")

Company.java

Company.java

  @Id
  @GeneratedValue(strategy=GenerationType.IDENTITY)
  @Column(name="id")
  private int id;
  @Column(name="compName")
  private String compName;
  @Column(name="address")
  private String address;

下面是插入代码:

InserAction .java

InserAction.java

public static void main(String[] args) {
    Company comp2 = new Company();
    comp2.setCompName("IBM");
    comp2.setAddress("Bangalore");

    Project pro2 = new Project();
    pro2.setProjectName("Management System");
    pro2.setProjectDesc("System");
    pro2.setCompany(comp2);
    EntityManager entityManager = EntityManagerUtil.getEmf().createEntityManager(); 
    try{
      EntityTransaction entr = entityManager.getTransaction();
      entr.begin();
      entityManager.persist(pro2);
      entr.commit();
    }
 }

DeleteAction.java

DeleteAction.java

EntityManager entityManager = EntityManagerUtil.getEmf()
            .createEntityManager();
    try {
        EntityTransaction entr = entityManager.getTransaction();
        entr.begin();       
        Project project = entityManager.find(Project.class,5);
        entityManager.remove(project);      

        entr.commit();
      }

例外是

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot delete or update a parent row: a foreign key constraint fails (`prabha`.`project`, CONSTRAINT `FK_project_companyId` FOREIGN KEY (`companyId`) REFERENCES `company` (`id`))
Error Code: 1451
  Call: DELETE FROM company WHERE (id = ?)
  bind => [1 parameter bound]
  Query: DeleteObjectQuery(com.demo.manytoone.Company@301db5ec)

从Project表中删除项目对象时,它抛出异常,我怎么能超过这个。

While deleting project object from Project table it' throwing above exception how can I over come this.

推荐答案

你有MySQLIntegrityConstraintViolationException。这意味着您绑定的数据库中有表。您应该在设置多对一关系表时进行映射。公司应该能够获得多个项目。所以你必须定义项目列表。

You got MySQLIntegrityConstraintViolationException. It means there are tables in the database you're binding. You should map when you set up the many to one relationship tables. Company should be able to get more than one project. So you have to define the list of projects.

Project.java

Project.java

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="projectName")
private String projectName;
@Column(name="projectDesc")
private String projectDesc; 

@ManyToOne
@JoinColumn(name="companyId")
private Company company;

Company.java

Company.java

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id")
private int id;
@Column(name="compName")
private String compName;
@Column(name="address")
private String address;

@OneToMany(mappedBy="company", fetch=FetchType.EAGER)
private List<Project> projects;

这篇关于多对一关系在删除子对象时,它会抛出异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆