【发布时间】:2014-12-02 10:21:38
【问题描述】:
所以我的数据库模型是这样的:我有Stores 并且每个Store 都有一个本地化名称。所以我选择将本地化名称表示为Map,如下所示:
public class Store {
private Map<Locale,LocalizedValue> name;
}
如您所见,它是<Locale, LocalizedValue> 的地图,其中LocalizedValue 是这样的类:
@Embeddable
public class LocalizedValue {
@Column(name = "value")
private String value;
}
这一切都很好。但是我遇到了一个问题,我想查询我的 Spring Data JPA 存储库并找到所有具有给定英文名称的商店。所以我的存储库方法如下所示:
Store findByName(Map.Entry<Locale, LocalizedValue> name);
但它会抛出这个异常:
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)
然后我将存储库方法更改为:
Store findByName(LocalizedValue name);
但后来我得到了这个异常:
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)
我也尝试在查询方法中使用 Contains - 仍然没有运气。
所以我的问题是:有没有办法查询英文名称为“Some Value”的商店?
【问题讨论】:
标签: java spring jpa spring-data spring-data-jpa