java - JPA ManyToMany 持续存在

标签 java hibernate jpa many-to-many persist

我有一个 NOTIFICATION 表,其中包含一个 ManyToMany 关联:

@Entity
@Table(name="NOTIFICATION")
@NamedQuery(name="Notification.findAll", query="SELECT f FROM Notification f")
public class Notification {

/** SOME COLUMN DEFINITION NOT IMPORTANT FOR MY CASE
    COD, DATE, ID_THEME, ID_TYP, IC_ARCH, ID_CLIENT, INFOS, NAME, TITRE_NOT, ID_NOT
**/

        @ManyToMany
        @JoinTable(
            name="PJ_PAR_NOTIF"
            , joinColumns={
                @JoinColumn(name="ID_NOTIF")
                }
            , inverseJoinColumns={
                @JoinColumn(name="ID_PJ_GEN")
                }
            )
        private List<PiecesJointesGen> piecesJointesGens;
}

因此,我有一个名为 PJ_PAR_NOTIF 的关联表。

我尝试保留一个Notification实体。这是来自值对象的piecesJointesGens初始化:

@PersistenceContext(unitName="pu/middle")

private EntityManager entityMgr;

FoaNotification lFoaNotification = new FoaNotification();

for(PieceJointeGenVO lPJGenVO : pNotificationVO.getPiecesJointes()){
        PiecesJointesGen lPiecesJointesGen = new PiecesJointesGen();
        lPiecesJointesGen.setLienPjGen(lPJGenVO.getLienPieceJointeGen());
        lPiecesJointesGen.setIdPjGen(lPJGenVO.getIdPieceJointeGen());
        lNotification.getFoaPiecesJointesGens().add(lFoaPiecesJointesGen);
}

entityMgr.persist(pNotification);

坚持不起作用。 JPA 为我的通知对象生成第一个插入,没问题:

insert 
into
    NOTIFICATION
    (COD, DATE, ID_THEME, ID_TYP, IC_ARCH, ID_CLIENT, INFOS, NAME, TITRE_NOT, ID_NOT) 
values
    (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

然后,JPA 尝试在我的关联表中插入值,但pieceJointesGen 目前不存在:

insert 
into
    PJ_PAR_NOTIF
    (ID_NOTIF, ID_PJ_GEN) 
values
    (?, ?)

所以,我有这个错误:

GRAVE: EJB Exception: : java.lang.IllegalStateException: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.entities.PiecesJointesGen

有没有办法告诉 JPA 在 PJ_PAR_NOTIF 插入之前插入 piecesJointesGen

最佳答案

修改 piecesJointesGens 映射到 @ManyToMany(cascade = CascadeType.PERSIST)

关于java - JPA ManyToMany 持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31534871/

相关文章:

java - 大多数类似 MySQL 的与 hibernate 兼容的内存数据库?

java - 通常,在应用程序的什么地方放置 SQL 查询?

java - Spring/Hibernate 应用程序仅在没有 @Transactional 的情况下工作

java - 为什么我无法在 hibernate 中删除两个相邻的对象?

jpa - 在工作单元克隆异常中遇到空或零主键不起作用

java - 无法使用 JPA 工具从数据库生成实体

java - 在数据库中存储 joda-time 日期时间

java - 有什么办法可以去掉两端多余的 0's from the end of array when using Arrays.toString() and also the square brackets ' [ ]' 吗?

java - 使用 ProcessBuilder 停止从 Java 扫描树莓派中的 BLE 加密狗

java - 如何使用 hibernate 检索表的所有主键?