Ho iniziato a lavorare con Spring Data Elasticsearch su Spring Boot 1.3.1 e voglio utilizzare la stessa entità che utilizza nel mio database e ha una chiave composta. Classeè possibile creare spring-data-elasticsearch @Document con la chiave composta?
Entity:
@IdClass(PassengerPk.class)
@Table(name = "passenger")
@Document(indexName="passenger")
public class Passenger implements Serializable {
@Id
@ManyToOne
@JoinColumn(columnDefinition="long", name="user_id", referencedColumnName="id")
private User user;
@Id
@ManyToOne
@JoinColumn(columnDefinition="long", name="scheduler_id", referencedColumnName="id")
private Scheduler scheduler;
@Column(name = "is_active")
private Boolean isActive;
...
}
classe Key:
public class PassengerPk implements Serializable {
private Long user;
private Long scheduler;
public PassengerPk() {
}
public PassengerPk(Long user, Long scheduler) {
this.user = user;
this.scheduler = scheduler;
}
...
}
JPA elasticsearch repository:
public interface PassengerSearchRepository extends ElasticsearchRepository<Passenger, PassengerPk> {
}
Database: database relationships
Se provo a compilare questo codice, ottengo questo errore.
Caused by: java.lang.IllegalArgumentException: Unsuppored ID type class com.dualion.test.domain.PassengerPk
at org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactory.getRepositoryBaseClass(ElasticsearchRepositoryFactory.java:79) ~[spring-data-elasticsearch-1.3.1.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepositoryInformation(RepositoryFactorySupport.java:238) ~[spring-data-commons-1.11.1.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:181) ~[spring-data-commons-1.11.1.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251) ~[spring-data-commons-1.11.1.RELEASE.jar:na]
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237) ~[spring-data-commons-1.11.1.RELEASE.jar:na]
at org.springframework.data.elasticsearch.repository.support.ElasticsearchRepositoryFactoryBean.afterPropertiesSet(ElasticsearchRepositoryFactoryBean.java:55) ~[spring-data-elasticsearch-1.3.1.RELEASE.jar:na]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ~[spring-beans-4.2.3.RELEASE.jar:4.2.3.RELEASE]
... 71 common frames omitted
Come posso modificare il mio codice?
Grazie
qualcuno può darmi una soluzione? – kn4ls
Come si eredita la dipendenza da '@ IdClass'?Penso che sia una classe portata da una dipendenza JPA, ES con JPA non è così banale da configurare, non so come. Quindi ovviamente non puoi usarlo per ES. A proposito, sarebbe molto utile per me sapere come raggiungere il tuo obiettivo. – andPat
Infine usa HibernateSearch e non ES, perché l'implementazione è più semplice. – kn4ls