在同一个文件中使用瞬态同时使用Gson和Hibernate

时间:2015-06-14 03:22:42

标签: java hibernate gson transient

我有实体,我需要一些不被保留的字段和一些不被序列化的字段。

我在某些字段上使用@Transient,但是当我想为Gson标记瞬态时。问题在于hibernate选择它并且也不会持久化,因为它也是Hibernate中的关键字。

我使用Hibernate-jpa-2.1-api javax.persistence.Transient

我正在尝试阻止addresses被序列化,并且不应保存getDefaultAddress

代码:

@Entity
@Table(name="Business")
public class Business{

    @OneToMany(mappedBy="business")
    private transient List<Phone> addresses;

    @Transient
    public Phone getDefaultPhone() {
        return phones.get(0);
    }
}

任何解决方案?

2 个答案:

答案 0 :(得分:0)

您可以使用@Expose

@Expose(serialize = false)
@OneToMany(cascade=CascadeType.ALL, mappedBy="business")
private List<Address> addresses;

为了能够使用此注释,

final GsonBuilder builder = new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
final Gson gson = builder.create();

来源:http://www.javacreed.com/gson-annotations-example/

答案 1 :(得分:0)

我正在使用Play Framework的JPA和Gson的实现。

我将其与JPA类一起使用,如下所述,它涉及在编组到json之前动态构造嵌入式对象,并且GSON构建器不需要任何更改,因为修改GSONBuilder也会全局更改其他类的策略。 / p>

public class DBServiceDefinition {
    @Transient
    @Expose(serialize = true)
    @SerializedName("serviceStatus")
    public ServiceDefinitionStatus status = new 
     ServiceDefinitionStatus(201,"SUCCESS","","Test");
}