Java 将对象保存到实体中而不在JPA中持久化

Java 将对象保存到实体中而不在JPA中持久化,java,hibernate,jpa,singleton,transient,Java,Hibernate,Jpa,Singleton,Transient,我正在做一个play框架中的应用程序,在这个框架中,我需要将非实体对象的同一个实例存储到JPA实体中,而不将其持久化到数据库中,我想知道是否有可能实现这一点,或者不使用注释。我正在寻找的示例代码是: public class anEntity extends Model { @ManyToOne public User user; @ManyToOne public Question question; //Encrypted candidate

我正在做一个play框架中的应用程序,在这个框架中,我需要将非实体对象的同一个实例存储到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 annotation,但它应该将对象字段嵌入实体表中。在实体表中隐藏对象列的同时,是否仍可以使用@Embedded?

查看注释:

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

为了确保始终获得相同的对象,您可以实现该模式,以便您的实体可以使用其
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;
    }
}

我试过了,但当我从数据库中获取实体后尝试使用瞬态对象时,它会给我一个空指针异常。向类中添加一个Constroctur,并在那里设置Testobject,正如答案中指出的那样..我很确定这应该是可行的,但您也可以尝试在一个简单的块{}中设置瞬态对象在类中:还必须使用默认构造函数。没有任何参数。并且不要将
@Transient
注释与
Transient
关键字混淆。它们在字段上都有效;)我对问题和答案进行了一些编辑,以澄清应该始终使用相同的瞬态实例。希望你不介意。。