有没有一种方法(配置参数)来改变Hibernate的默认行为,以考虑未注释的域类的域作为被保留?休眠 - 忽略非注释字段,而不需要添加@Transient
我希望Hibernate默认情况下认为非注释字段是暂时的,不能考虑持久性,而不是努力用@Transient注释所有这些字段。
有没有一种方法(配置参数)来改变Hibernate的默认行为,以考虑未注释的域类的域作为被保留?休眠 - 忽略非注释字段,而不需要添加@Transient
我希望Hibernate默认情况下认为非注释字段是暂时的,不能考虑持久性,而不是努力用@Transient注释所有这些字段。
它看起来并不像它可能与Hibernate的注解,根据Hibernate Reference:
在注释的世界里,每一个非静态的非瞬态特性 (取决于接入类型字段或方法)的一个实体 被视为持久性的,除非您将其注释为@Transient。不是 为您的财产注释相当于 适当@Basic注释。
当然,使用XML映射,您可以只添加将要映射的属性。
这是一个遗憾。我认为在加载期间加载元数据的Hibernate代码中添加if/else以激活/取消激活此行为应该不会很困难。无论如何,谢谢你的回答。如果有人找到办法做到这一点,我就会打开票。 – Comencau
我有同样的问题,真的不好,没有一个特定于hibernate的注释来忽略作为业务逻辑的一部分但不对应于列的字段。我不能使用@Transient
作为我,否则我必须将DTO与Entity类分开,这对我来说是非常有用的。
但是,我发现了一种解决方法,我使用了@Formula
注释并在其中给出默认值。例如;
@Entity
@Table(name = "users")
public class User implements Serializable {
@Column(unique = true, insertable = true, updatable = false)
@Id
String userId;
@Formula("0") // @Transient
Integer nonDBInteger;
...
我知道它似乎不是最好的,但它仍然适用于我。
似乎是不可能的。创建了一个JIRA问题:https://hibernate.atlassian.net/browse/HHH-8909。希望它会被认为是公平的... – Comencau