问题是,我在使用@RepositoryRestResource
作为扩展JpaRepository
的UserRepository
时遇到异常。
原因是findById
在默认情况下只接受Long
或Int
类型,即使我@Id String id;
,而不是实体定义中的@Id Int id
。
我已经尝试搜索StackOverflow和谷歌,但还没有找到任何解决方案.
错误消息如下:"Failed to convert from type [java.lang.String] to type [java.lang.Integer] for value '3175433272470683'; nested exception is java.lang.NumberFormatException: For input string: \"3175433272470683\""
我想让它工作@Id String id;
有什么建议吗?
非常感谢,在这里提问是我的荣幸。
实体类:
@Entity // This tells Hibernate to make a table out of this class
@Table(name = "users")
public class XmppUser {
@Id
private java.lang.String username;
private String password;
private String serverkey;
private String salt;
private int iterationcount;
private Date created_at;
// @Formula("ST_ASTEXT(coordinates)")
// @Column(columnDefinition = "geometry")
// private Point coordinates;
// private Point coordinates;
private String full_name;
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "username", nullable = true)
private XmppLast xmppLast;
5条答案
按热度按时间kninwzqo1#
您必须变更存放库中ID类型参数的类型,以符合实体上的ID属性类型。
来自Spring文档:
基于
应该是
请参阅:
9gm1akwq2#
您可以尝试以下操作:
如果你想了解更多关于这个主题的信息,你可以开始寻找throw here或here
gtlvzcf83#
根据最新版本的spring data jpa(2.1.10 GA),您可以像
一样使用它
这里是link
6rqinv9w4#
JpaRepository是CrudRepository的一个特例。JpaRepository和CrudRepository都声明了两个类型参数,T和ID。您需要提供这两个类类型。例如,
或
请注意,第二个类型
java.lang.String
必须与主键属性的类型匹配。在这种情况下,不能将其指定为String
或Integer
,而应指定为java.lang.String
。尽量不要将自定义类命名为
String
。使用与JDK中已有的类名相同的类名是不好的做法。vlurs2pr5#
我认为有一种方法可以解决这个问题。
比如说,Site是我们的@Entity。
然后可以按如下所示调用findById
注意:这对我很有效,我希望它能帮助到一些人。