将对象保存到实体中而不将其保留在JPA中

时间:2011-05-09 18:31:41

标签: java hibernate jpa singleton transient

我在play框架中做一个应用程序,我需要将一个非Entity对象的相同实例存储到JPA实体中而不将其持久化到数据库中,我想知道是否可以实现或不使用它注释。我正在寻找的示例代码是:

 public class anEntity extends Model {
    @ManyToOne
    public User user;

    @ManyToOne
    public Question question;


    //Encrypted candidate name for the answer
    @Column(columnDefinition = "text")
    public BigInteger candidateName;

    //I want that field not to be inserted into the database
    TestObject p= new TestObject();

我尝试了@Embedded注释,但它应该将对象字段嵌入到实体表中。无论如何使用@Embedded,同时保持对象列隐藏在实体表中?

1 个答案:

答案 0 :(得分:7)

查看@Transient注释:

“此注释指定属性或字段不是持久的。它用于注释实体类,映射的超类或可嵌入类的属性或字段。”

为了确保始终获得相同的对象,您可以实现Singleton模式,这样您的实体就可以使用其getInstance()方法来设置瞬态对象:

所以这应该可以解决问题:

public class anEntity extends Model {
    @Transient
    private TransientSingleton t;

    public anEntity(){ // JPA calls this so you can use the constructor to set the transient instance.
        super();
        t=TransientSingleton.getInstance();
    }


public class TransientSingleton { // simple unsecure singleton from wikipedia

    private static final TransientSingleton INSTANCE = new TransientSingleton();
    private TransientSingleton() {
        [...do stuff..]
    }
    public static TransientSingleton getInstance() {
        return INSTANCE;
    }
}