当前位置: 首页 > 知识库问答 >
问题:

为什么JPA实体类不能有自定义的实例变量?

彭华皓
2023-03-14

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

基本属性只能是以下类型:Java基本类型、基本类型包装器、字符串、Java。数学BigInteger,java。数学BigDecimal,java。util。日期,爪哇。util。日历,java。sql。日期,爪哇。sql。时间,爪哇。sql。时间戳、字节[]、字节[]、字符[]、字符[]、枚举或任何可序列化类型。

为什么会这样?

共有3个答案

唐彦
2023-03-14

尝试在getter方法中添加@瞬态

@Transient
public PhotoStatus getStatus() { 
  return status;    
}
东方淇
2023-03-14

如果你阅读了错误信息的这一部分,你就会得到答案。

或任何可串行化类型。

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

杜霍英
2023-03-14

如果你想让JPA忽略这个特定属性,你应该给它一个@Transient注释(然后自己管理);如果你想让它持久化,你应该让PhotoStatus成为一个合适的实体。

 类似资料:
  • 问题内容: 在我们的hibernate项目中,使用java bean模式对实体进行编码。在我们的代码中,有很多地方有人忘记了设置变量的设置,但由于NOT NULL字段而导致异常。 是否有人在使用构建器来构建其实体或使其不可变? 我正在尝试找到一种不是Java bean模式样式的有效模式。 谢谢 问题答案: 如果使Bean不可变,则必须使用字段级访问,并且这附带了它自己的一系列问题,在此进行了详细讨

  • 当我将Java EE应用程序部署到Glassfish时,我有一个非常奇怪的问题。我有一个Eclipse EAR项目,它引用了一个Web项目(包含一个servlet),一个EJB项目(有一个EJB)和一个JPA项目(有一个@Entity)。在我的 servlet 中,我调用 EJB,它又执行以下查询: 在上面代码的第三行,我得到了一个异常: 我已经调试了上面提到的Hibernate类,即Metamo

  • 问题内容: 我有一个名为“威士忌制造商”的课程,它只会启动新的威士忌。现在,我想在“ WhiskyOverViewController”中添加新添加的威士忌。但是我面临以下问题: 在“ stringArray”行中,出现错误“实例成员’whiskyArray’无法用于类型’WhiskyOverViewController’。为什么不能在那里使用whiskyArray变量? 在此先感谢您的帮助 问题

  • 可能重复: 分析错误:语法错误,中出现意外的“(”,应为“,”或“;” 我正在做以下工作: 如果我这样做,我会收到一个编译错误,上面说: 语法错误,意外'(',期待','或';' 如果我在类外执行,它工作得很好。 如果我将分配给局部变量,它工作得很好。 有人知道为什么我不能将其分配给实例变量吗?

  • 问题内容: 请参阅下面的代码,其中的方法被覆盖,但变量没有被覆盖。为什么允许在子类中声明重复的变量? 问题答案: 为什么在子类方法中不覆盖超类的实例变量,请参见下面的代码… 因为实例变量不能在Java中覆盖。在Java中,只能重写方法。 当你声明一个与超类中现有字段同名的字段时,新字段将隐藏现有字段。超类中的现有字段仍存在于子类中,甚至可以使用…遵守常规的Java访问规则。 因为实例变量在Java