Ion*_*nut 8 java spring hibernate spring-data
我有以下设置:
@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
}
Run Code Online (Sandbox Code Playgroud)
和id类:
public class MemberAttributePk implements Serializable {
protected Member member;
protected String name;
public MemberAttributePk() {}
// get & set
}
Run Code Online (Sandbox Code Playgroud)
我为以下内容定义了一个简单的Spring Data存储库MemberAttribute
:
@Repository
public interface MemberAttributeRepo extends JpaRepository<MemberAttribute, MemberAttributePk> {
}
Run Code Online (Sandbox Code Playgroud)
现在,我想要做的就是将成员属性保存到数据库:
public void saveAttribute(Member member, String name, String value) {
MemberAttribute attr = new MemberAttribute(member, name, value);
attributeRepo.save(attr);
}
Run Code Online (Sandbox Code Playgroud)
但是,我最终得到了这个服务器异常:
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
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?谢谢!
Kon*_*bun 11
只是您的代码不符合JPA.问题的原因是你Member
用作PK的一部分.
PK只能由以下Java类型的字段组成
- 基元:布尔值,字节,字符,整数,长整数,短整数
- java.lang:Boolean,Byte,Character,Integer,Long,Short,String,Enum,StringBuffer
- java.math:BigInteger java.sql:Date,Time,Timestamp
- java.util:Date,Currency,Locale,TimeZone,UUID
- java.net:URI,URL
- 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
}
Run Code Online (Sandbox Code Playgroud)
或者与之相同 @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
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3690 次 |
最近记录: |