首页 > 解决方案 > 无法保存实体可嵌入 ID

问题描述

我有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] .wsmsDefaultHandlerExceptionResolver:无法转换请求元素:org.springframework.beans.ConversionNotSupportedException:无法转换“java”类型的属性值.lang.Long' 为属性 'ecran' 所需的类型 'com.kepler.porttailclient.domain.model.Ecran';嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.Long”的值转换为属性“ecran”所需的类型“com.kepler.portaiclient.domain.model.Ecran”:找不到匹配的编辑器或转换策略2018-09-25 12:15:42.889 WARN 14216 --- [nio-8092-exec-8] .wsmsDefaultHandlerExceptionResolver:由处理程序执行引起的已解决异常:org.springframework.beans.ConversionNotSupportedException:无法将类型“java.lang.Long”的属性值转换为属性“ecran”所需的类型“com.kepler.porttailclient.domain.model.Ecran”;嵌套异常是 java.lang.IllegalStateException:无法将类型“java.lang.Long”的值转换为属性“ecran”所需的类型“com.kepler.portaiclient.domain.model.Ecran”:找不到匹配的编辑器或转换策略

标签: javaspringspring-bootspring-data-jpa

解决方案


尝试这样的事情:

@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 
}    

推荐阅读