Java xSpring中带有Spring数据JPA的Crudepository的@Id字符串如何获得?

Java xSpring中带有Spring数据JPA的Crudepository的@Id字符串如何获得?,java,spring,hibernate,spring-data-jpa,spring-hateoas,Java,Spring,Hibernate,Spring Data Jpa,Spring Hateoas,问题是,对于扩展了JpaRepository的UserRepository,我在使用@RepositoryRestResource时遇到异常 原因是findById默认情况下只接受Long或Int类型,即使我有 @Id字符串Id而不是实体定义中的@Id Int Id 我尝试过搜索StackOverflow和Google,但没有找到任何解决方案 错误消息如下所示: “无法将值'3175433272470683'的类型[java.lang.String]转换为类型[java.lang.Integer

问题是,对于扩展了
JpaRepository
UserRepository
,我在使用
@RepositoryRestResource
时遇到异常

原因是
findById
默认情况下只接受
Long
Int
类型,即使我有

@Id字符串Id而不是实体定义中的
@Id Int Id

我尝试过搜索StackOverflow和Google,但没有找到任何解决方案

错误消息如下所示:

“无法将值'3175433272470683'的类型[java.lang.String]转换为类型[java.lang.Integer];嵌套异常为java.lang.NumberFormatException:对于输入字符串:\'3175433272470683\'”

我想让它与一个

@Id字符串Id

有什么建议吗

非常感谢你的帮助。在这里提问是一种莫大的荣幸

实体类:

@Entity//这告诉Hibernate用这个类生成一个表
@表(name=“users”)
公共类XmppUser{
@身份证
私有java.lang.String用户名;
私有字符串密码;
私有字符串服务器密钥;
私盐;
私有整数迭代计数;
创建于的私人日期;
//@公式(“ST_ASTEXT(坐标)”)
//@Column(columnDefinition=“geometry”)
//专用点坐标;
//专用点坐标;
私有字符串全名;
@OneToOne(fetch=FetchType.LAZY)
@JoinColumn(name=“username”,nullable=true)
私有XmppLast XmppLast;

您可以尝试以下方法:

@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "PR_KEY")
private String prKey;

如果您想了解更多有关此主题的信息,您可以开始查看或

您必须更改存储库上的ID类型,以与实体上的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;
    //...

    }
应该是

public interface UserRepository extends CrudRepository<XmppUser, String> {
    //..
    }
public interface UserRepository扩展了crudepository{
//..
}

参见

根据spring data jpa(2.1.10 GA)的最新版本,您可以像


以下是

JpaRepository是crudepository的特例。JpaRepository和crudepository都声明了两个类型参数T和ID。您需要提供这两个类类型。例如

public interface UserRepository extends CrudRepository<XmppUser, java.lang.String> {
//..
}
public interface UserRepository扩展了crudepository{
//..
}

public interface UserRepository扩展了JpaRepository{
//..
}
请注意,第二个类型
java.lang.String
必须与主键属性的类型匹配。在这种情况下,不能将其指定为
String
Integer
,而是
java.lang.String


尽量不要将自定义类命名为
String
。使用与JDK中已存在的类名相同的类名是一种不好的做法。

您可以发布实体类代码吗?刚刚发布了一个实体类,尝试了。不起作用。同样的错误。只需重试。只需将其添加到存储库中:
@Override Optional findById(String integer);
它说:
方法不会重写其超类中的方法
@DavidJones,我添加了一个example@admiz635这正是我所拥有的,在它里面:
@Override可选的findById(字符串整数)
哦,我的错。刚刚注意到,
crudepository
的第二个类型参数是字符串!这就解决了问题!干得好@admiz635!@DavidJones所以您的spring数据jpa版本是?版本:2.1.9。RELEASE@DavidJones可以这样尝试:@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(name=“Id”)私有字符串id;无法解决问题。我希望Spring的问题更少。这是我今天发现的第二个bug。
public interface UserRepository extends JpaRepository<XmppUser, java.lang.String> {
//..
}