Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 实体管理器“;删除“;不删除_Jpa_Hibernate Entitymanager_Remove Method - Fatal编程技术网

Jpa 实体管理器“;删除“;不删除

Jpa 实体管理器“;删除“;不删除,jpa,hibernate-entitymanager,remove-method,Jpa,Hibernate Entitymanager,Remove Method,我有许多实体,对于CUD操作,我分别使用persist()、merge()和remove()方法。但下面的删除方法不起作用。所以我必须使用query来删除给定的对象。我用谷歌搜索了一下,但没有找到满意的答案 @Stateless @LocalBean public class PickListFacade { @PersistenceContext private transient EntityManager em; // ... public bool

我有许多实体,对于CUD操作,我分别使用persist()、merge()和remove()方法。但下面的删除方法不起作用。所以我必须使用query来删除给定的对象。我用谷歌搜索了一下,但没有找到满意的答案

@Stateless
@LocalBean
public class PickListFacade {

    @PersistenceContext
    private transient EntityManager  em;

    // ...

    public boolean deletePickList(final PickList pickList) {
        try {
            // below commented out line did not work; so one below that is employed
            // this.em.remove(this.em.find(PickList.class, pickList.getId()));
            this.em.createQuery("DELETE FROM PickList p WHERE p.id = :id").setParameter("id", pickList.getId()).executeUpdate();
            return true;
        } catch (final PersistenceException pe) {
            logger.error("[deletePickList] : Error : {}", pe.getMessage(), pe);
            return false;
        }
    }
}
为了简化,我用Tuple替换了PickList。但他并不认为这会引起混乱。这就是:原始代码

@Entity
@Table(name = "PICK_LIST_VALUES")
public class PickListValue implements Serializable, ILabelValue {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "list_value_generator")
    @TableGenerator(initialValue = 1, 
                    allocationSize = 1, 
                    name = "list_value_generator", 
                    table = "SEQUENCES", 
                    pkColumnName = "SEQUENCE_NAME", 
                    valueColumnName = "SEQUENCE_NEXT_HI_VALUE", 
                    pkColumnValue = "PICK_LIST_VALUES")
    @Column(name = "PICK_LIST_VALUE_ID")
    private Long              id;

    @Column(name = "PICK_LIST_VALUE")
    private String            value;

    @Column(name = "PICK_LIST_VALUE_CODE")
    private Long              code;

    @Column(name = "RANK")
    private Integer           rank;

    // bi-directional many-to-one association to PickList
    @ManyToOne
    @JoinColumn(name = "PICK_LIST_ID")
    private PickList          pickList;

    public PickListValue() {
    }

    // getters and setters ...
}

@Entity
@Table(name = "PICK_LISTS")
public class PickList implements Serializable {

    private static final long   serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "list_generator")
    @TableGenerator(initialValue = 1,
                    allocationSize = 1,
                    name = "list_generator",
                    table = "SEQUENCES",
                    pkColumnName = "SEQUENCE_NAME",
                    valueColumnName = "SEQUENCE_NEXT_HI_VALUE",
                    pkColumnValue = "PICK_LISTS")
    @Column(name = "PICK_LIST_ID")
    private Long                id;

    @Column(name = "PICK_LIST_NAME", unique = true)
    private String              name;

    @Column(name = "PICK_LIST_DESCRIPTION")
    private String              description;

    @Column(name = "CREATED_BY")
    private String              createdBy;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "DATE_CREATED")
    private Date                dateCreated;

    @OneToMany(mappedBy = "pickList", fetch = FetchType.EAGER, cascade = { CascadeType.ALL }, orphanRemoval = true)
    private List<PickListValue> pickListValues;

    public PickList() {
    }

    // getters and setters ...
}
@实体
@表(name=“选择列表值”)
公共类PickListValue实现可序列化的ILabelValue{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.TABLE,generator=“列表值生成器”)
@TableGenerator(初始值=1,
allocationSize=1,
name=“列表\u值\u生成器”,
table=“序列”,
pkColumnName=“序列名称”,
valueColumnName=“序列\u下一个\u高\u值”,
pkColumnValue=“选择列表值”)
@列(name=“选择列表值ID”)
私人长id;
@列(name=“选择列表值”)
私有字符串值;
@列(name=“选择列表\值\代码”)
私有长码;
@列(name=“RANK”)
私有整数秩;
//与拾取列表的双向多对一关联
@许多酮
@JoinColumn(name=“选择列表ID”)
私人挑选名单;
公共PickListValue(){
}
//接球手和接球手。。。
}
@实体
@表(name=“选择列表”)
公共类选取列表实现可序列化{
私有静态最终长serialVersionUID=1L;
@身份证
@GeneratedValue(策略=GenerationType.TABLE,generator=“列表\生成器”)
@TableGenerator(初始值=1,
allocationSize=1,
name=“列表\u生成器”,
table=“序列”,
pkColumnName=“序列名称”,
valueColumnName=“序列\u下一个\u高\u值”,
pkColumnValue=“拾取列表”)
@列(name=“选择列表ID”)
私人长id;
@列(name=“PICK\u LIST\u name”,unique=true)
私有字符串名称;
@列(name=“选择列表\说明”)
私有字符串描述;
@列(name=“创建人”)
创建的私有字符串;
@时态(TemporalType.TIMESTAMP)
@列(name=“创建日期”)
创建私人日期;
@OneToMany(mappedBy=“pickList”,fetch=FetchType.EAGER,cascade={CascadeType.ALL},orphanRemoving=true)
私有列表pickListValues;
公共挑选名单(){
}
//接球手和接球手。。。
}

当你说它不工作时,它会做什么?它会引发异常吗?元组上的主键定义是否正确?Id列被构造为“我的其他实体”。persist()和merge()方法在没有问题的情况下工作。remove()方法不会给出任何异常。假设容器管理的持久性(即,
deleteteTuple
末尾的隐式提交),什么都不做确实会令人惊讶。我已经发布了原始代码。很抱歉给你带来了困惑。是的,我只是重新运行代码:它不会向控制台写入任何异常。我正在用查询方式做我必须做的事情,但我在这里问这个问题的原因是为了让社区找到一个解决Hibernate这个可能的bug的方法。@Ahmet你班上有
@Transactional
?如果未启用跟踪日志记录,请启用它以查看数据库sql语句。