Хранилище находи в растерянности - PullRequest
0 голосов
/ 06 мая 2018

В моей базе данных есть класс Exchange, который содержит список CurrencyPairs.

Можно ли использовать метод Repository для непосредственного получения CurrencyPair, который совпадает по имени внутри данного Exchange? Я думаю о чем-то вроде

CurrencyPairDbo findByExchangeNameAndCurrencyPairIn(...)

но я не понимаю, как все это связать. Или мне нужно написать собственный запрос для этого? И это должно быть в ExchangeRepository или CurrencyPairRespository?

@Entity()
@Table(name = "Exchanges")  
public class ExchangeDbo {
  @Id @GeneratedValue   
  @Getter private Long id; 

  @Getter private String exchangeName;   

  @OneToMany(mappedBy = "exchange", 
        cascade = CascadeType.ALL, 
        orphanRemoval = true, 
        fetch = FetchType.EAGER)
  @BatchSize(size=100)
  @Getter private List<CurrencyPairDbo> listCurrencyPair = new ArrayList<>();
  ...
}



@Entity() 
public class CurrencyPairDbo {
  @Id @GeneratedValue   
  @Getter private Long id;

  @Column(unique=true)
  private String currencyPair;

  @ManyToOne(fetch=FetchType.EAGER)  
  @Getter private ExchangeDbo exchange;
  ...
}

Edit:

Я думаю, что это не Find ... Во что я хочу вообще. Я думаю, что-то вроде:

List<CurrencyPairDbo> x = exchangeRepository.findByExchangeNameLowercaseAndListCurrencyPairCurrencyPair(exchangeName.toLowerCase(), currencyPair);

может работать, за исключением того, что in возвращает объект Exchange и a:

org.springframework.core.convert.ConverterNotFoundException: не найден конвертер, способный преобразовать тип [biz.ianw.coindatabase.database.ExchangeDbo] в тип [biz.ianw.coindatabase.database.CurrencyPairDbo]

1 Ответ

0 голосов
/ 07 мая 2018

Это, в хранилище валютных пар, похоже, делает эту работу.

Я добавил строчное поле для сопоставления и индекс эффективности.

CurrencyPairDbo findByExchangeExchangeNameLowercaseAndCurrencyPairNameLowercase( String exchangeName, String currencyPair );
...