相关疑难解决方法(0)

单向和双向JPA和Hibernate关联有什么区别?

单向和双向关联有什么区别?

由于在db中生成的表都是相同的,因此我发现的唯一区别是双向关联的每一侧都将引用另一侧,而单向不引用.

这是一个单向关联

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}

public class Group {
    private int     id;
    private String  name;
}
Run Code Online (Sandbox Code Playgroud)

双向关联

public class User {
    private int     id;
    private String  name;
    @ManyToOne
    @JoinColumn(
            name = "groupId")
    private Group   group;
}
public class Group {
    private int         id;
    private String      name;
    @OneToMany(mappedBy="group")
    private List<User>  users;
}
Run Code Online (Sandbox Code Playgroud)

区别在于该组是否拥有用户的参考.

所以我想知道这是唯一的区别吗?哪个推荐?

java orm hibernate jpa associations

122
推荐指数
4
解决办法
10万
查看次数

ORM映射中的"拥有方"是什么?

拥有方到底意味着什么?一些映射示例(一对多,一对一,多对一)的解释是什么?

以下文本摘自Java EE 6文档中对@OneToOne的描述.你可以看到这个概念拥有方在里面.

定义与具有一对一多重性的另一个实体的单值关联.通常不必明确指定关联的目标实体,因为它通常可以从被引用的对象的类型推断出来.如果关系是双向的,则非拥有方必须使用OneToOne批注的mappedBy元素来指定拥有方的关系字段或属性.

java mapping orm hibernate jpa

117
推荐指数
3
解决办法
3万
查看次数

关系所有者在双向关系中意味着什么?

我有一个简单的模型QuestionChoice对象.

  • 一个问题有很多选择(S).
  • 很多选择有一个问题

使用Hibernate有两种方法可以实现

实施一:业主方是选择

Question.java

@OneToMany (mappedBy="question")
private Set choices = new HashSet();
Run Code Online (Sandbox Code Playgroud)

Choice.java

@ManyToOne
@JoinColumn (name="QUESTION_ID")
private Question question;
Run Code Online (Sandbox Code Playgroud)

实施二:业主方是问题

Question.java

@OneToMany
@JoinColumn (name = "QUESTION_ID")
private Set choices = new HashSet();
Run Code Online (Sandbox Code Playgroud)

Choice.java

@ManyToOne
@JoinColumn (name="QUESTION_ID", updatable = false, insertable = false)
private Question question;
Run Code Online (Sandbox Code Playgroud)

这两个实现有什么区别?

hibernate

27
推荐指数
1
解决办法
1万
查看次数

防止toString()中无限递归的最有效方法?

如果收集项的图形中的某个地方是一个返回自身的引用,则对集合上的字符串可以进入无限循环.见下面的例子.

是的,良好的编码实践应该首先防止这种情况,但无论如何,我的问题是:在这种情况下检测递归的最有效方法是什么?

一种方法是在threadlocal中使用一个集合,但这看起来有点沉重.

public class AntiRecusionList<E> extends ArrayList<E> {
  @Override
  public String toString() {
    if (  /* ???? test if "this" has been seen before */ ) {
        return "{skipping recursion}";
    } else {
        return super.toString();
    }
  }
}


public class AntiRecusionListTest {
  @Test
  public void testToString() throws Exception {
      AntiRecusionList<AntiRecusionList> list1 = new AntiRecusionList<>();
      AntiRecusionList<AntiRecusionList> list2 = new AntiRecusionList<>();
      list2.add(list1);
      list1.add(list2);
      list1.toString();  //BOOM !
  }
}
Run Code Online (Sandbox Code Playgroud)

java recursion tostring

16
推荐指数
2
解决办法
8756
查看次数

标签 统计

hibernate ×3

java ×3

jpa ×2

orm ×2

associations ×1

mapping ×1

recursion ×1

tostring ×1