0

假设我有一个名为Photo用于存储照片的 JPA 实体类。我还有另一个非实体类PhotoStatus,用于保存这些计数信息,例如shareCountlikeCountcommentCountprivate PhotoStatus status;现在,如果在实体类中添加一个实例变量( )Photo来保存这些状态信息,则会显示以下错误消息:

基本属性只能是以下类型:Java 原始类型、原始类型的包装器、String、java.math.BigInteger、java.math.BigDecimal、java.util.Date、java.util.Calendar、java.sql.Date 、java.sql.Time、java.sql.TimeStamp、byte[]、Byte[]、char[]、Character[]、枚举或任何可序列化类型。

为什么会这样?

4

4 回答 4

2

如果您阅读了错误消息的这一部分,您将得到答案。

或任何可序列化类型。

您的自定义类(PhotoStatus)需要实现Serializable接口。

于 2013-10-24T09:38:44.350 回答
2

如果您希望 JPA 忽略该特定属性,您应该给它@Transient注解(然后自己管理它);如果您希望它持续存在,您应该创建PhotoStatus一个适当的实体。

于 2013-10-24T09:43:20.957 回答
1

尝试在你的getter方法中添加@Transient

@Transient
public PhotoStatus getStatus() { 
  return status;    
}
于 2013-10-24T09:42:29.770 回答
0

似乎很可能PhotoStatus@Embeddable

@实体
公开课照片{
    ...
    私人照片状态状态;
    ...
}

@可嵌入
公共类 PhotoStatus {
    私有 int shareCount;
    私人 int likeCount;
    私人 int 评论计数;
}

默认情况下,这会将PhotoStatus字段映射到Photo' 表中具有相同名称的列。为了允许您在多个实体中使用嵌入,您可以覆盖实体中的默认列名:

@实体
公开课照片{
    ...
    @AttributeOverride(name="shareCount", column=@Column(name = "SHARE"))
    私人照片状态状态;
    ...
}
于 2013-10-24T18:05:47.413 回答