【发布时间】:2017-02-05 00:45:53
【问题描述】:
派生的 DeleteBy 查询不起作用。但是findBy 并使用@Query 删除有效。
我尝试添加@Modifying和@Transactional,我将返回类型更改为Long、List<OrderItem>、void。
这是我的 CrudRepository 接口,Order 和 OrderItem 类:
public interface OrderItemRepository extends CrudRepository<OrderItem, Long> {
List<OrderItem> findByOrderAndItem_ItemGroup(Order order, ItemGroup itemGroup);
@Transactional
Long deleteByOrder(Order order);
@Modifying
@Query("delete from OrderItem o where o.order = ?1")
Integer deleteByOrderQuery(Order order);
}
@Entity
@Table(name = "t_order_items")
public class OrderItem {
@GeneratedValue
@Id
private Integer id;
@Column(name="itemcount")
private Integer itemCount;
@OneToOne()
@JoinColumn(name="item_id")
private Item item;
@ManyToOne
@JoinColumn(name = "oder_id")
private Order order;
}
@Entity
@Table(name = "t_orders")
public class Order implements Serializable {
@GeneratedValue
@Id
private Integer id;
@Column(name = "orderdate")
private LocalDate orderDate;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE, mappedBy = "order")
private List<OrderItem> orderItems;
}
我已阅读文档http://docs.spring.io/spring-data/jpa/docs/current/reference/html/,但 deleteBy 并没有什么特别之处。
【问题讨论】:
-
我读过这个,我提到我读过文档。我知道它必须起作用,但我不知道为什么它不起作用。
-
请您具体说明您的情况是什么“OrderItem”和“Order”
-
您的问题提示问题可能出在
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "order") private List<OrderItem> orderItems;中,我发现了这个stackoverflow.com/a/32745045/3001523。所以如果我需要 CascadeType.ALL 我只能使用 @Query ?
标签: java spring spring-data spring-data-jpa