Java 为什么可以';JPA实体类可以有自定义实例变量吗?
假设我有一个名为Java 为什么可以';JPA实体类可以有自定义实例变量吗?,java,jpa,Java,Jpa,假设我有一个名为Photo的JPA实体类来存储照片。我还有另一个名为PhotoStatus的非实体类来保存这些计数信息,例如shareCount、likeCount和commentCount。现在,如果将实例变量(private PhotoStatus status;)添加到实体类Photo以保存这些状态信息,将显示以下错误消息: 基本属性只能是以下类型:Java基元 类型、基元类型的包装器、字符串、java.math.BigInteger、, java.math.BigDecimal、java
Photo
的JPA实体类来存储照片。我还有另一个名为PhotoStatus
的非实体类来保存这些计数信息,例如shareCount
、likeCount
和commentCount
。现在,如果将实例变量(private PhotoStatus status;
)添加到实体类Photo
以保存这些状态信息,将显示以下错误消息:
基本属性只能是以下类型:Java基元
类型、基元类型的包装器、字符串、java.math.BigInteger、,
java.math.BigDecimal、java.util.Date、java.util.Calendar、,
java.sql.Date,java.sql.Time,java.sql.TimeStamp,字节[],字节[],
字符[]、字符[]、枚举或任何可序列化类型
为什么会这样?如果您阅读了错误消息的这一部分,就会得到答案 或任何可序列化类型
您的自定义类(
PhotoStatus
)需要实现Serializable
接口。如果您阅读了错误消息的这一部分,您将得到答案
或任何可序列化类型
您的自定义类(
PhotoStatus
)需要实现可序列化的接口。尝试在getter方法中添加@Transient
@Transient
public PhotoStatus getStatus() {
return status;
}
尝试在getter方法中添加@Transient
@Transient
public PhotoStatus getStatus() {
return status;
}
如果您希望JPA忽略该特定属性,则应为其提供
@Transient
注释(然后自己管理);如果你想让它持久化,你应该让PhotoStatus成为一个合适的实体。如果你想让JPA忽略这个特殊属性,你应该给它一个@Transient
注释(然后自己管理);如果你想让它持久化,你应该使PhotoStatus
成为一个合适的实体。似乎PhotoStatus
是一个@可嵌入的:
@Entity
public class Photo {
...
private PhotoStatus status;
...
}
@Embeddable
public class PhotoStatus {
private int shareCount;
private int likeCount;
private int commentCount;
}
似乎PhotoStatus是一个可嵌入的:
@Entity
public class Photo {
...
private PhotoStatus status;
...
}
@Embeddable
public class PhotoStatus {
private int shareCount;
private int likeCount;
private int commentCount;
}
@乔莫斯-没问题!:)每个人都会遇到:)技术上正确,但我强烈建议不要在数据库中存储序列化java对象-这几乎总是一个设计错误,IMHO…@GyroGearless-是的,你是对的。但我真的不知道OP在这里想做什么。因此,避免建议使用@Transient
#如果可行的话,你必须考虑使用<代码> @瞬态>代码>字段,这些字段是不打算持久的。我也觉得transient
更适合我的情况。@Jomoos-没问题!:)每个人都会遇到:)技术上正确,但我强烈建议不要在数据库中存储序列化java对象-这几乎总是一个设计错误,IMHO…@GyroGearless-是的,你是对的。但我真的不知道OP在这里想做什么。因此,避免建议使用@Transient
#如果可行的话,你必须考虑使用<代码> @瞬态>代码>字段,这些字段是不打算持久的。我也觉得对于我来说,transient
更合适。。。。或者为该类型提供一个TypeConverter来定义如何持久化它,或者使它实现可序列化。。。或者为该类型提供一个TypeConverter来定义如何持久化该类型,或者使其实现可序列化