Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以';JPA实体类可以有自定义实例变量吗?_Java_Jpa - Fatal编程技术网

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来定义如何持久化该类型,或者使其实现可序列化