当前位置: 首页 > 面试题库 >

无法在具有@IdClass的实体中转换请求元素

徐文彬
2023-03-14
问题内容

我有以下设置:

@Entity
@IdClass(MemberAttributePk.class)
public class MemberAttribute {
    @Id
    @ManyToOne @JoinColumn(name="member_id")
    protected Member member;

    @Id
    protected String name;

    private String value;

    public MemberAttribute() {}

    // get & set
}

和id类:

public class MemberAttributePk implements Serializable {
    protected Member member;
    protected String name;

    public MemberAttributePk() {}

    // get & set
}

我已经为定义了一个简单的Spring Data存储库MemberAttribute

@Repository
public interface MemberAttributeRepo extends JpaRepository<MemberAttribute, MemberAttributePk> {
}

现在,我要做的就是将成员属性持久保存到数据库中:

public void saveAttribute(Member member, String name, String value) {
    MemberAttribute attr = new MemberAttribute(member, name, value);
    attributeRepo.save(attr);
}

但是,我最终遇到此服务器异常:

2016-08-28 00:24:20.673  WARN 5656 --- [nio-8080-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.example.Member] for property 'member'; nested exception is java.lang.IllegalStateException: 
Cannot convert value of type [java.lang.Long] to required type [com.example.Member] for property 'member': 
no matching editors or conversion strategy found

知道我在做什么错吗?谢谢!


问题答案:

只是您的代码不符合JPA。问题的原因是您将其Member用作PK的一部分。 PK只能由以下Java类型的字段组成

  1. 基元 :布尔值,字节,字符,整数,长,短
  2. java.lang :布尔值,字节,字符,整数,长,短,字符串,枚举,StringBuffer
  3. java.math :BigInteger java.sql:Date,Time,Timestamp
  4. java.util :日期,货币,语言环境,时区,UUID
  5. **java.net** :URI,URL
  6. javax.jdo.spi :PersistenceCapable

这应该工作:

@Embeddable
public class MemberAttributePk implements Serializable {
    @Column(name = "member_id")
    protected Long memberId;
    @Column(name = "name")
    protected String name;

    public MemberAttributePk() {}

    // get & set
}

@Entity
public class MemberAttribute {

    @EmbeddedId
    protected MemberAttributePk memberAttributePk;

    @ManyToOne 
    @JoinColumn(name="member_id")
    protected Member member;

    private String value;

    public MemberAttribute() {}

    // get & set
}

还是一样 @ClassId

public class MemberAttributePk implements Serializable {
    protected Long memberId;
    protected String name;

    public MemberAttributePk() {}

    // get & set
}

@Entity
@IdClass(MemberAttributePk.class)
public class MemberAttribute {
    @Id
    @Column(name = "member_id")
    protected Long memberId;

    @Id
    @Column(name = "name")
    protected String name;

    @ManyToOne 
    @JoinColumn(name="member_id")
    protected Member member;

    private String value;

    public MemberAttribute() {}

    // get & set
}


 类似资料:
  • 花了3天时间寻找解决方案,最后我来到这里寻求社区智慧。 我有如下的自我引用实体: 我通过手动运行它来确保请求不会返回数据库中的任何内容,但发现如果我将更改为,它将返回数据,因此,块中可能存在错误

  • 我在开发工具的帮助下将请求复制为CURL,并收到: 已将请求复制到控制台(curl工作正常)。收到的结果 在的帮助下将curl转换为python请求https://curl.trillworks.com/收到: 已尝试此代码,但收到错误 body是无效的拉丁语-1。使用body.encode('utf-8'),如果你想发送它编码在UTF-8。 补充。编码('utf-8')) 但收到无效结果: b'

  • 问题内容: 我在客户端使用Java-http-client库和Apache Transport,在服务器端使用Rails。有时会出现如下所示的获取错误: 我应该怎么做才能避免这种情况? 问题答案: 我有一个类似的错误,因为我使用了CountingInputStreamEntity这是一个不可重复的http客户端。解决方案是使用BufferedHttpEntity,它将不可重复的HTTP客户端转换为

  • 我正在使用Spring和Hibernate进行JSF项目,其中包括许多遵循相同模式的: > 接收并返回转换为 代码基本如下(省略检查): 鉴于大量的s与此完全相同(当然除了和的类型),我想知道是否值得使用一个通用转换器。泛型本身的实现并不困难,但我不确定声明bean的正确方法。 一个可能的解决方案如下: 1-编写泛型实现,我们称之为,没有任何Bean注释 2-将特定的转换器编写为MyGeneric

  • 我有以下实体: 我第一次使用复合主键,所以我不知道它应该如何工作。问题可能来自定义。第二个参数应该表示ID。但是没有一个主键,而是有两个主键,所以我认为我应该将id类添加到id参数中,但这不起作用。如何使用带有CrudRepository的IdClass键保存具有复合主实体?

  • 本文向大家介绍Django 请求Request的具体使用方法,包括了Django 请求Request的具体使用方法的使用技巧和注意事项,需要的朋友参考一下 1 URL路径参数 在定义路由URL时,使用正则表达式提取参数的方法从URL中获取请求参数,Django会将提取的参数直接传递到视图的传入参数中。 未命名参数按顺序传递, 如 有命名参数按名传递,如 2、 查询字符串Query String 获