so mein Datenbankmodell geht so: Ich habe Store
s und jeder Store
hat einen lokalisierten Namen. So habe ich gewählt, um den lokalisierten Namen als Map
wie folgt darstellen:Wie Abfragen von Kartenwerten mit Spring Data JPA?
public class Store {
private Map<Locale,LocalizedValue> name;
}
wie Sie es ist eine Karte von <Locale, LocalizedValue>
sehen kann, wo die LocalizedValue
ist eine Klasse wie folgt aus:
@Embeddable
public class LocalizedValue {
@Column(name = "value")
private String value;
}
und alles funktioniert super. Allerdings komme ich zu einem Problem, bei dem ich mein Spring Data JPA-Repository abfragen und alle Stores mit einem bestimmten englischen Namen finden möchte. So sieht mein Repository Methode wie folgt:
Store findByName(Map.Entry<Locale, LocalizedValue> name);
aber es wirft diese Ausnahme:
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)
Also änderte ich meine Repository Methode wie folgt zu sein:
Store findByName(LocalizedValue name);
aber dann habe ich habe diese Ausnahme:
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)
Ich habe auch versucht, Enthält in der Abfrage-Methode - immer noch kein Glück.
Also meine Frage ist: Gibt es eine Möglichkeit, für die Geschäfte mit dem englischen Namen 'Some Value' abzufragen?
Danke für Ihre Antwort. Ist dies in Spring JPA dokumentiert? Wo kann ich mehr Informationen darüber erhalten, wie die Map-Werte durch Spring JPA erweitert werden? – Sharadr
Kann das auch mit Collection-Parameter gemacht werden? – mihn