2014-01-29 59 views
1

有没有一种方法(配置参数)来改变Hibernate的默认行为,以考虑未注释的域类的域作为被保留?休眠 - 忽略非注释字段,而不需要添加@Transient

我希望Hibernate默认情况下认为非注释字段是暂时的,不能考虑持久性,而不是努力用@Transient注释所有这些字段。

+0

似乎是不可能的。创建了一个JIRA问题:https://hibernate.atlassian.net/browse/HHH-8909。希望它会被认为是公平的... – Comencau

回答

1

它看起来并不像它可能与Hibernate的注解,根据Hibernate Reference

在注释的世界里,每一个非静态的非瞬态特性 (取决于接入类型字段或方法)的一个实体 被视为持久性的,除非您将其注释为@Transient。不是 为您的财产注释相当于 适当@Basic注释。

当然,使用XML映射,您可以只添加将要映射的属性。

+0

这是一个遗憾。我认为在加载期间加载元数据的Hibernate代码中添加if/else以激活/取消激活此行为应该不会很困难。无论如何,谢谢你的回答。如果有人找到办法做到这一点,我就会打开票。 – Comencau

0

我有同样的问题,真的不好,没有一个特定于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; 

... 

我知道它似乎不是最好的,但它仍然适用于我。