EntityManager不会删除复合实体

时间:2019-07-10 16:53:01

标签: jpa persistence entitymanager composite-key

在我的项目中,类似于某种Amazon Prime服务,用户(Id,名字和姓氏)可以租借(UserIdMovieId)电影({{ 1}},标题,导演和长度)。

该项目具有以下结构:

Id

实体都具有以下代码的变体(RentalsID除外,它只有两个ID字符串,仅此而已):

Source Packages/
├── Entity/
│   ├── Movies.java
│   ├── Rentals.java
│   ├── RentalsId.java
│   └── Users.java
├── Session/
│   ├── AbstractFacade.java
│   ├── MoviesFacade.java
│   ├── RentalsFacade.java
│   └── UsersFacade.java
└── View/
    ├── WebMovie.java
    ├── WebRental.java
    └── WebUser.java

“出租”除外,其中也有@Entity @Table(name = "xxx") @XmlRootElement @NamedQueries({ @NamedQuery(name = "xxx.findAll", query = "SELECT x FROM XXX x") , ....}) public class xxx implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "id", length = 10, nullable = false) private String id; //getters, setters, other column data, equals, hash and tostring. 和两个@IdClass(RentalsId.class)

XXXFacades从AbstractFacade扩展而来,它们仅具有EntityManager,以及一些用于保存,更新和删除实体的方法。他们在这里:

@Id

WebXXX可以与xhtml控制器进行通信。

我的问题是关于租赁。由于它们具有两个主要的外键,因此在其外观中发生了某些事情,实际上并没有起作用。

public void Save(x x, y y, z z) {
    try {
        xxx toSave = new xxx(x,y,z);
        entManager.persist(toSave);
    } catch (Exception e) {
        throw new EJBException(e.getMessage());
    }
}

public xxx Edit(xxx toChange) {
    try {
        return entManager.merge(toChange);
    } catch (Exception e) {
        throw new EJBException(e.getMessage());
    }
}

public void Delete(xxx toDelete) {
    try {   
        if (!entManager.contains(toDelete)) {
            toDelete = entManager.merge(toDelete);
        }

        entManager.remove(toDelete);
    } catch (Exception e) {
        throw new EJBException(e.getMessage());
    }
}

当我尝试通过发送空对象时,它打印了FINDME并引发了异常。但是,当我通过一个Rental对象发送时,它没有打印任何内容,甚至没有异常。我真的不知道它是否进入,因为它没有抛出错误,应该进入,但是由于它没有打印我的FINDME标志,所以我什至不认为它正在进入方法。

我该如何解决?它与RentalId对象有关吗?我必须以某种方式使用它吗?还是我只是错误地使用了remove方法?

0 个答案:

没有答案