如果我创建了一个客户和控制器,那么将我的控制器与客户关联就可以保存。
如果我然后删除我的控制器,它不会删除它们之间的关系。 当我加载Customer时,这会导致EntityNotFoundException。
javax.persistence.EntityNotFoundException: Unable to find Controller with id 22
我想知道如何映射这个,这样当删除Controller时,关系也会被删除。
数据库表
Controller的id不会从customer_controllers映射表中删除。
@Entity
public class Customer implements Serializable{
private Integer id;
private Set<Controller> controllers;
@Id
@GeneratedValue
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@ManyToMany(cascade={CascadeType.ALL})
public Set<Controller> getControllers()
{
return controllers;
}
public void setControllers(Set<Controller> controllers)
{
this.controllers = controllers;
}
}
@Entity
public class Controller implements Serializable{
private Integer id;
private String name;
private String abbreviation;
@Id
@GeneratedValue
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAbbreviation()
{
return abbreviation;
}
public void setAbbreviation(String abbreviation)
{
this.abbreviation = abbreviation;
}
}
答案 0 :(得分:3)
如果您有ManyToMany,那么您应该使用
将Controller映射到Customer @ManyToMany(mappedBy="controllers")
或者相反,取决于哪一方是拥有方。
正如你现在所知,关系没有完全定义,它会在像“Cascade”这样的事件上失败。
答案 1 :(得分:1)
你检查了@ManyToMany的javadoc吗? 它包括上面的示例映射。
答案 2 :(得分:0)
您需要使关系成为双向关系,以便控制器对象知道它与客户的关系。这意味着当删除控制器时,连接表中的记录也会被删除。
这不是确切的映射,但它可以为您提供想法。
@Entity
public class Controller implements Serializable{
private Integer id;
private String name;
private String abbreviation;
private Set<Customer> customers;
@Id
@GeneratedValue
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAbbreviation()
{
return abbreviation;
}
public void setAbbreviation(String abbreviation)
{
this.abbreviation = abbreviation;
}
@ManyToMany(cascade={CascadeType.ALL})
public Set<Customer> getCustomers()
{
return customers;
}
public void setCustomers(Set<Customers> customers)
{
this.customers= customers;
}
}