【问题标题】:hibernate/jpa how to store relation between one entityhibernate/jpa如何存储一个实体之间的关系
【发布时间】:2014-11-27 05:15:22
【问题描述】:

我想在数据库中存储分层文件夹。 F.e

@Entity
public class Folder {

int id
String name
Folder parentFolder

}

因此,如果文件夹在子文件夹中,他应该存储有关 parentFolder 的信息 如果文件夹在根/顶级文件夹中,它没有任何父文件夹,所以会有空

我应该如何使用注释设置休眠来实现这一点?

我的实体类:

@Entity
@Table(name="common__Role")
public class Role {

/** The id. */
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;

/**
 * Parent Role id.
 */
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="ROLE_ID")
public Role role;

/** The name. */
@Constraints.Required
public String name;

【问题讨论】:

  • 这是一个@OneToMany 和一个@ManyToOnerelation,所以你应该这样处理。

标签: java hibernate jpa orm annotations


【解决方案1】:

这应该是你的实体..

@Entity
@Table("FOLDER")
public class Folder {

  @Id
  private long id;

  @Column(name="NAME")
  private String name;

  @ManyToOne(fetch=FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE })
  @JoinColumn(name="PARENT_ID")
  private Folder parentFolder;


  //Getter and Setter
}

也许你应该关注this tutorial

如何坚持 ManyToOne

Folder f= new Folder();
f.setName("name");

Folder fParent = entityManager.find(Folder .class, 1L);
f.setParent(fParent);

entityManager.persist(f);

另见this tutorial

【讨论】:

  • 我试过了,但是您的解决方案没有解决问题。当我添加另一个文件夹并选择 parentFolder 时,没有错误。但是子父之间的数据库中没有关系ID
  • 要保存关系需要一个 JoinColumn 否则不起作用。您应该添加一列 PARENT_ID。我建议你使用 JPA 建立一个简单的多对一关系。
  • "您应该添加一列 PARENT_ID" - 您是说数据库吗?我已经这样做了,但只有空值。没有关系
  • 如果你想坚持一切,你应该为你需要的行动添加一个级联关系。例如。 @ManyToOne(fetch=FetchType.LAZY,cascade = {CascadeType.PERSIST,CascadeType.MERGE })
  • 它没有帮助。请记住,我在一个实体内部有关系
猜你喜欢
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 2021-05-06
  • 2021-05-22
  • 1970-01-01
相关资源
最近更新 更多