使用@Transient Annotation进行持久性存储

时间:2018-05-03 12:24:15

标签: java spring hibernate spring-data-jpa

我有一个包含多个属性的对象。我的对象的一个​​属性是包含ArrayList的另一个对象。层次结构如下。

Object - Organization
(
String orgId
String orgName
String parentOrgName

Organization.Workers workers  //Object of Worker list...

)

我想将组织对象存储在imdb(在内存数据库中)中。我正在使用Hibernate会话进行数据库连接。

我已经将Worker对象设置为Transient,就像这样。

@Transient
protected Organization.Workers workers;

当我检索Organization时,每次将此worker对象设为null时。请指导我使用@transient注释,并告诉我如何使用java spring中的hibernate会话在imdb中存储嵌套对象。

2 个答案:

答案 0 :(得分:3)

@Transient注释用于告诉JPA不要在数据库中存储字段。此外,无论何时处理作文,都要弄清楚它们之间的关系。

在上面的示例中,关系似乎是一对多关系,因为一个组织可以拥有多个工作人员,但一个工作人员一次只能在一个组织中工作。

您必须使用@OneToMany注释告诉JPA这种关系。

查看Hibernate的official link如何使用它。

答案 1 :(得分:1)

当您需要特定字段用于某些工作但不希望该字段存储在数据库中时,将使用@Transient注释。

这里提出了你的问题,有组织和工人,所以关系是@OneToMany关系。

在组织类:

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="organization")
private List<Workers> workers = new ArrayList<>();

在工人阶级:

@ManyToOne
@JoinColumn(name="id", unique=true)
private Organization organization;

在这里,1个组织可以拥有许多工人,而一个工人只能在1个组织上工作。你有它。 :d