2016-09-27 6 views
1

Derived DeleteByクエリは機能しません。しかしfindBy@Queryで削除してください。Spring deleteByは@Queryでのみ動作します

私は@Modifying@Transactionalを追加しようとしました、私はLongList<OrderItem>voidに型を返すに変更しました。

これは私のCrudRepositoryインターフェース、注文と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について何も特別なことはありません。

+1

可能性のある重複した[春データ:サポートされている "により削除"?](http://stackoverflow.com/questions/23723025/spring-data-delete-by-is-サポートされています) – xenteros

+1

私はこれを読んで、私は文書を読んだことに言及しました。私はそれが動作する必要があることを知っているが、私はなぜそれが動作していないのか分からない。 –

+1

あなたのケースで "OrderItem"と "Order"を指定してください。 –

答えて

0

あなたは1を読むことができます提供してきたURLで:

public interface UserRepository extends CrudRepository<User, Long> { 

    Long deleteByLastname(String lastname); 
    List<User> removeByLastname(String lastname); 
} 

あなたの問題は、メソッドの間違った戻り値の型を持っていること、であるかもしれません。 Deleteメソッドは、削除されたアイテムのIDを返します。

コードは次のようになります。

public interface OrderItemRepository extends JpaRepository<OrderItem, Long> { 
    List<OrderItem> findByOrderAndItem_ItemGroup(Order order, ItemGroup itemGroup); 

    Long deleteByOrder(Order order); 

    @Modifying 
    @Query("delete from OrderItem o where o.order = ?1") 
    Integer deleteByOrderQuery(Order order); 
} 
+1

私は戻り値の型を 'Long'、' List '、' void'に変更しても機能しません。 –

+0

なぜ 'CrudRepository <>'を使わないのですか? – xenteros

+0

@SlavaBabinあなたの質問に詳細を追加していただけますか?何かエラーがありますか?レポに他の方法がありますか? – xenteros

1

問題がCascadeType.ALLにありました。 私はそれをCascadeType.REMOVEに変更しました。 右の答えは次のとおりです。の

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE, mappedBy = "order") 
private List<OrderItem> orderItems; 
関連する問題