Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.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
Java &引用;批更新从更新[0]返回了意外的行计数;实际行数:0;预期:1"E;”使用@Scheduled方法调用删除时_Java_Multithreading_Spring_Hibernate - Fatal编程技术网

Java &引用;批更新从更新[0]返回了意外的行计数;实际行数:0;预期:1"E;”使用@Scheduled方法调用删除时

Java &引用;批更新从更新[0]返回了意外的行计数;实际行数:0;预期:1"E;”使用@Scheduled方法调用删除时,java,multithreading,spring,hibernate,Java,Multithreading,Spring,Hibernate,我面临着以下问题。使用@Scheduled method invocation删除对象时出现错误“批处理更新从更新[0]返回意外的行数;实际行数:0;应为:1;”。错误仅在@Scheduled invocation时出现,我第一次调用deleteInactiveOrders()时出错。如果从控制器手动调用调度方法-一切正常,则不会出现错误。我假设这个错误与多线程问题有关,但我不知道如何修复它 服务方式: @Transactional @Scheduled(cron = "*/30 * * * *

我面临着以下问题。使用@Scheduled method invocation删除对象时出现错误“批处理更新从更新[0]返回意外的行数;实际行数:0;应为:1;”。错误仅在@Scheduled invocation时出现,我第一次调用
deleteInactiveOrders()
时出错。如果从控制器手动调用调度方法-一切正常,则不会出现错误。我假设这个错误与多线程问题有关,但我不知道如何修复它

服务方式:

@Transactional
@Scheduled(cron = "*/30 * * * * *")
public void deleteInactiveOrders() {
   orderDAO.deleteInactiveOrders();
}
orderDAO.deleteInactiveOrders():

public void deleteInactiveOrders(){

List allInactiveOrdersList=sessionFactory.getCurrentSession().createQuery(“从Order,其中orderDate您的代码中不需要以下语句
sessionFactory.getCurrentSession().delete(Order);
,您正在执行一个
user.removeOrder(Order);
在已附加到会话的实体上,这样它将负责删除订单。

好的,您正在访问列表中的订单,因此不能同时删除它。但是当
删除不活动订单()
从控制器手动调用一切正常。此错误仅在调度调用时发生。user.removeOrder(order);在这里,您只需从列表中删除实体?或者执行对DB的调用?以下是代码:
orders.remove(order);
-从列表中删除订单
order.setUser(null);
-将用户实体变量设置为null是的,您是对的。但是删除
sessionFactory.getCurrentSession().delete(order);
没有影响出错。如果我没有错,您的批处理每30秒运行一次,请验证您的进程是否在30秒内结束。否则可能是两个线程在同一个对象上运行,至少这是异常所说的。我不这么认为。我第一次调用
deleteInac时出错tiveOrders()
public void deleteInactiveOrders() {
List<Order> allInactiveOrdersList = sessionFactory.getCurrentSession().createQuery("from Order where orderDate <= sysdate-1").list();
     if (allInactiveOrdersList.size() >=1 ){

      for (Order order: allInactiveOrdersList){
          User user = order.getUser();
          user.removeOrder(order);
        }
      }
    }
@Entity
@Table(name = "orders")
public class Order implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private int orderId;
    .....

    @ManyToOne
    @JoinColumn(name = "userId", insertable = true, updatable = false)
    private User user;

    @LazyCollection(LazyCollectionOption.FALSE)
    @OneToMany(mappedBy = "order", orphanRemoval=true)
    @Cascade({org.hibernate.annotations.CascadeType.ALL})
    private List<ExchangeTransaction> exchangeTransactions = new ArrayList<ExchangeTransaction>();

    public int getId() {
        return orderId;
    }