java - 无法保存实体可嵌入 ID

标签 java spring spring-boot spring-data-jpa

我有 EcranChamp 实体

@Entity
@IdClass(EcranChampId.class)
public class EcranChamp {

@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ecran")
Ecran ecran;


@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "champ")
Champ champ;

...

EcranChampId

@Embeddable
public class EcranChampId implements Serializable  {    
private Champ champ;  
private Ecran ecran;
...

每次我尝试保存 EcranChamp 元素时,我都会遇到以下错误

2018-09-25 12:15:42.889 WARN 14216 --- [nio-8092-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to convert request element: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Long' to required type 'com.kepler.portailclient.domain.model.Ecran' for property 'ecran'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.Long' to required type 'com.kepler.portailclient.domain.model.Ecran' for property 'ecran': no matching editors or conversion strategy found 2018-09-25 12:15:42.889 WARN 14216 --- [nio-8092-exec-8] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.Long' to required type 'com.kepler.portailclient.domain.model.Ecran' for property 'ecran'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.Long' to required type 'com.kepler.portailclient.domain.model.Ecran' for property 'ecran': no matching editors or conversion strategy found

最佳答案

尝试这样的事情:

@Entity
@Table(name = "<entity name>")
public class EcranChamp {

    @EmbeddedId
    @AttributeOverrides({ @AttributeOverride(name = "id_ecran", column = @Column(name = 
        "<column name>", nullable = false)),
    @AttributeOverride(name = "id_champ", column = @Column(name = "<column name>", nullable = false)) })
    EcranChampId id

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_ecran")
    Ecran ecran;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "id_champ")
    Champ champ; 
   //getters & setters 
 }   


@Embeddable
public class EcranChampId implements Serializable  {   
  @Column(name = "id_champ", nullable = false) 
  private Long id_champ; 
  @Column(name = "id_ecran", nullable = false)  
  private Long id_ecran; 
  //getters & setters 
}    

关于java - 无法保存实体可嵌入 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496955/

相关文章:

java - 使用 JODConveter 进行 doc 到 docx 转换失败,错误代码 : 2074

java - Spring - 注入(inject) vavr 集合

使用 Maven 运行时会跳过 Spring 测试

java - Spring请求验证不起作用

java - 类集合接口(interface)继承自 Collection

java - 使用相应的专用 "beans"文件进行设置时,单个 spring "properties"属性值被覆盖(使用@PropertySource)

java - 在Applet中生成随机三角形(动画)

java - 覆盖指向复合键 JPA/Hibernate 的外键名称

mysql - 拒绝用户 '<userid>' @'<my-pc-ip-address>' 对于表 '<table-name>' 的 SELECT 命令

java - 如何在 TaskExecutionAutoConfiguration 旁边创建额外的 TaskExecutor?