2016-05-09 14 views
6

Ben şu varlık var:Bahar Veriler - VEYA depo yöntemi adı koşul benim Bahar Veri projede

Ben cardPairId dayalı bir CardPair arayacağı bir bahar Veri deposu yöntemini uygulamak gerekir
@Entity 
@NamedEntityGraph(name = "graph.CardPair", attributeNodes = {}) 
@Table(name = "card_pairs") 
public class CardPair extends BaseEntity implements Serializable { 

    private static final long serialVersionUID = 7571004010972840728L; 

    @Id 
    @SequenceGenerator(name = "card_pairs_id_seq", sequenceName = "card_pairs_id_seq", allocationSize = 1) 
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "card_pairs_id_seq") 
    private Long id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "card1_id") 
    private Card card1; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "card2_id") 
    private Card card2; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "selected_card_id") 
    private Card selectedCard; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "board_id") 
    private Board board; 

.... 

} 

, board ve card. Benim için daha karmaşık bir durum Card olduğu için, card1 = card or card2 = card Bu koşulu Bahar Veri havuzu yöntemi adıyla sağlamak mümkün mü? Örneğin

cardPairRepository.findByIdAndBoardAnd[card1 = card or card2 = card]AndSelectedCardIsNull(cardPairId, board, card); 

için

bir yöntem adına bu durumu card1 = card or card2 = card çevirmek mümkün mü?

+0

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications sadece aradığınız Are Burada bir yöntem adı? –

+0

Evet, belirtilen yöntemle bu yöntem adını yapılandıramıyorum – alexanoid

+2

Bulucu yöntemlerini yalnızca basit kullanım durumları için kullanın, karmaşık durumlar için bir sorgu yazın ve '@ Query 'açıklamasını kullanın. –

cevap

2

gibi bir şey olması gerekir. Bu, parantez içinde olması gereken son koşula gereksiniminiz olduğundan yalnızca yöntem adını kullanarak bunu gerçekleştiremezsiniz: id = ? AND board = ? AND (card1 = ? OR card2 = ?). Sadece temel vakaları kapsaması amaçlandığından, bu yöntemin yöntem isminden çıkmasının bir yolu yoktur.

üç durumda da yol vardır:

0

Sen Size bir yöntemde operasyonların yapıyoruz gibi burada yöntemini aşağı ayrılmalıyız benziyor yöntemini areCardsEqual(Card first, Card second)

çağırabilir. En iyi uygulamalar, her yöntemin bir operasyondan sorumlu olması gerektiğini göstermektedir.

... yoksa sadece Sorgunuzun beri HQL kullanarak @Query kullanabilirsiniz karmaşıktır

+0

Hayır, bir Spring Data Deposu oluşturmalıyım yöntem, bunun gibi bir şey - findByIdAndBoardAndCard1OrCard2AndSelectedCardIsNull – alexanoid

+0

Sonra girişleriniz ne olurdu? –

+0

'cardPairId',' board' ve 'card' – alexanoid

0

Burada tüm işlemler bulabilirsiniz: Ben Testen değil 2.2.2

findByIdAndBoardAndCard1OrCard2(cardPairId, board, card, card); 

http://docs.spring.io/spring-data/jpa/docs/1.3.0.RELEASE/reference/html/jpa.repositories.html bölüm Bunun sırası, ancak bu

+0

çalışmıyor - çalışma zamanı istisnası olan findByIdAndBoardAndCard1OrCard2 (cardPairId, currentBoard, card). – alexanoid

+0

kartının parametrelerde iki kez olması gerekir. –

+0

Son yorumumun yanı sıra, OR ifadesine eklenecek parantezler nedeniyle hiç çalışmayabilir. Ancak bu baharın sipariş nedeniyle nasıl halledileceğini biliyor olabilir. Alec tarafından sunulan 'Query' önerisi muhtemelen daha güvenlidir. –