quindi il mio modello di database funziona così: ho Store
s e ogni Store
ha un nome localizzato. Così ho scelto per rappresentare il nome localizzato come Map
come questo:Come richiedere i valori della mappa con Spring Data JPA?
public class Store {
private Map<Locale,LocalizedValue> name;
}
come si può vedere si tratta di una Mappa <Locale, LocalizedValue>
dove il LocalizedValue
è una classe come questa:
@Embeddable
public class LocalizedValue {
@Column(name = "value")
private String value;
}
e tutto funziona alla grande. Tuttavia, ho un problema in cui voglio interrogare il mio repository JPA Spring Data e trovare tutti i negozi con un determinato nome inglese. Quindi il mio metodo repository è simile al seguente:
Store findByName(Map.Entry<Locale, LocalizedValue> name);
ma genera questa eccezione:
2014-10-07 23:49:55,862 [qtp354231028-165] ERROR: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue(n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue (n/a)]
org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue (n/a)];
nested exception is java.lang.IllegalArgumentException: Parameter value [en=Some Value] did not match expected type [com.test.LocalizedValue (n/a)]
at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:384)
at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:216)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:417)
at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:59)
at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:213)
Così poi ho cambiato il mio metodo repository per essere come questo:
Store findByName(LocalizedValue name);
ma poi ho ha ottenuto questa eccezione:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'name1_.pk' in 'where clause'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
Ho anche provato a utilizzare Contiene nel metodo di query - ancora senza fortuna.
Quindi la mia domanda è: c'è un modo per interrogare i negozi con il nome inglese "Some Value"?
Grazie per la risposta. Questo è documentato in Spring JPA? Dove posso ottenere maggiori informazioni su come i valori della mappa vengono espansi da Spring JPA. – Sharadr
Lo stesso può essere fatto con il parametro Collection? – mihn