Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t使用复合键保存实体_Java_Hibernate_Jpa_Spring Data - Fatal编程技术网

Java Can';t使用复合键保存实体

Java Can';t使用复合键保存实体,java,hibernate,jpa,spring-data,Java,Hibernate,Jpa,Spring Data,当使用复合键时,尝试保存实体时,会出现异常。这是我试图保存到的异常、模型和存储库。有人能帮忙吗 org.springframework.beans.typemischException:转换失败 将“org.CheckType_$$\u jvst96c_4”类型的属性值设置为所需类型 属性“checkType”的“int”;嵌套异常是 java.lang.IllegalArgumentException:无法转换类型的值 将“org.CheckType_$$\u jvst96c_4”更改为属性所

当使用复合键时,尝试保存实体时,会出现异常。这是我试图保存到的异常、模型和存储库。有人能帮忙吗

org.springframework.beans.typemischException:转换失败 将“org.CheckType_$$\u jvst96c_4”类型的属性值设置为所需类型 属性“checkType”的“int”;嵌套异常是 java.lang.IllegalArgumentException:无法转换类型的值 将“org.CheckType_$$\u jvst96c_4”更改为属性所需的类型“int” “checkType”:属性编辑器 [org.springframework.beans.propertyEdit.CustomNumberEditor] 返回了类型为“org.CheckType_$$\u jvst96c_4”的不正确值

@实体
公共类检查类型{
@身份证
私有int-id;
@NotNull
私有字符串名称;
@OneToMany(mappedBy=“checkType”)
私人名单检查;
//接球手和接球手
}
@实体
公开课{
@身份证
@列(name=“offerid”)
私有整数offerId;
//...
@OneToMany(mappedBy=“offer”)
私人名单客户清单;
//接球手和接球手
}
@实体
@IdClass(ClientCheckId.class)
公共类客户端检查{
@身份证
@许多酮
@JoinColumn(name=“offer\u id”,referencedColumnName=“offerid”)
私募;
@身份证
@许多酮
@JoinColumn(name=“check\u type\u id”,referencedColumnName=“id”)
私人支票类型;
@身份证
私有日期时间戳;
私有字符串结果;
//接球手和接球手
}
公共类ClientCheckId实现了可序列化{
私人报价;
私有int校验类型;
私有日期时间戳;
//接球手和接球手
//equals和hashCode
}
公共接口ClientCheckRepo扩展了JpaRepository{
}

如果另一个实体是复合键的一部分,则必须在ID类中声明该实体,而不是其ID:

public class ClientCheckId implements Serializable {
    private int offer;
    private CheckType checkType;
    private Date timestamp;

    //getters and setters
    //equals and hashCode
}

如果您想了解Hibernate的工作方式,那么错误消息是可读的:
org.CheckType\u$\ uJVST96c\u4
是类的扩展版本,Hibernate试图通过反射将其分配给
ClientCheckId
CheckType
字段,并且由于类型不兼容而失败。

如果另一个实体是复合密钥的一部分,则必须在ID类中声明该实体,而不是其ID:

public class ClientCheckId implements Serializable {
    private int offer;
    private CheckType checkType;
    private Date timestamp;

    //getters and setters
    //equals and hashCode
}

如果您想了解Hibernate的工作方式,那么错误消息非常可读:
org.CheckType\u$\ uJVST96c\u4
是类的扩展版本,Hibernate试图通过反射将其分配给
ClientCheckId
CheckType
字段,但由于类型不兼容而失败。

上下文是什么?如何创建和保存此实体?通过MVC请求?我不知道上下文是否重要;我在控制器上获得一个请求,制作/保存一个报价,创建时间戳,读取检查类型,并为每个类型获取检查结果,然后使用所有参数集保存检查。上下文很重要,因为错误“org.springframework.beans.typemischException”表明问题在于请求参数的绑定。您能否发布相关的控制器代码。在控制器中调用“clientCheckRepo.save(clientCheck)”时发生异常。现在,这是在服务层。您的实体映射似乎有效(根据JPA2.1规范)。可能是Spring数据中的错误?您使用的是最新版本吗?上下文是什么?如何创建和保存此实体?通过MVC请求?我不知道上下文是否重要;我在控制器上获得一个请求,制作/保存一个报价,创建时间戳,读取检查类型,并为每个类型获取检查结果,然后使用所有参数集保存检查。上下文很重要,因为错误“org.springframework.beans.typemischException”表明问题在于请求参数的绑定。您能否发布相关的控制器代码。在控制器中调用“clientCheckRepo.save(clientCheck)”时发生异常。现在,这是在服务层。您的实体映射似乎有效(根据JPA2.1规范)。可能是Spring数据中的错误?你使用的是最新版本吗?当我这样做时,它工作了,但当我也更改了报价类型(int->offer)时,它没有工作。为什么报价和支票类型不同?!这不是JPA2.1规范所说的:“如果实体中的Id属性与父实体是多对一或一对一关系,则Id类中的对应属性必须与父实体的Id属性的类型[…]相同。”。参见2.4.1.1派生标识规范我也有同样的问题,但我不知道为什么会这样。如果我同时使用实体名称(即Offer和CheckType),它将不起作用。但是,如果我使用CheckType和int,或者Offer和int,它会工作。当我这样做时,它会工作,但当我也更改了Offer的类型(int->Offer)时,它不会工作。为什么报价和支票类型不同?!这不是JPA2.1规范所说的:“如果实体中的Id属性与父实体是多对一或一对一关系,则Id类中的对应属性必须与父实体的Id属性的类型[…]相同。”。参见2.4.1.1派生标识规范我也有同样的问题,但我不知道为什么会这样。如果我同时使用实体名称(即Offer和CheckType),它将不起作用。但是如果我使用CheckType和int,或者Offer和int,它就可以工作