【问题标题】:Annotation @Basic to transient variables注释 @Basic 到瞬态变量
【发布时间】:2012-01-06 05:21:11
【问题描述】:

我有一个 POJO 类,其中包括:
- 持久属性,
- 瞬态属性。

在编写 HQL 时,我考虑了以下两个方面:持久性和瞬态属性。 IE。类似select persistent_properties,transient_prop from Pojo_classname的HQL

对吗?

我可以给瞬态变量写@Basic注解吗?

【问题讨论】:

  • 您为什么要为数据库中不存在的字段(临时)创建查询?
  • 是的!实际上,我有两个具有@Formula(value="select ....") 的瞬态属性。和thanx Piotr

标签: java jakarta-ee jpa annotations hql


【解决方案1】:

不,这是不正确的。 HQL 查询转换为 SQL。 @Transient 属性不在数据库中,因此 SQL 查询将无法查询此属性。

@Basic@Transient 是矛盾的。第一个告诉“这个属性是持久的”,第二个告诉“这个属性不是持久的”。

如果您谈论的是 Java transient 关键字,而不是 @Transient 注释,那么可以,可以查询 transient 字段并使用 @Basic 进行注释。 transient 关键字与持久化无关,只与对象的二进制序列化有关。

【讨论】:

  • 谢谢JB,但是你能分辨出使用transient关键字和@Transient注解在功能上的区别吗?
  • 我在回答中告诉过你。 @Transient 表示“此字段不是持久字段”。这是一个 JPA 注释。瞬态的意思是“当序列化这个对象时,这个字段不应该被忽略”。这是一个 Java 关键字。
  • JB Nizet,你确定吗? JPA 2.0 规范:“所有未使用 'Transient' 注释的 non-transient 实例变量都是持久的。”。如果我在我的字段之前添加“瞬态”关键字,它将不会被持久化,并且在使用模式生成时不会创建适当的列。以下引用“映射注释不得应用于瞬态Transient的字段或属性。”
猜你喜欢
  • 2017-10-15
  • 2014-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多