Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用实体+有什么优势吗&引用;映射为;过度使用身份证?_Java_Jpa_Ejb - Fatal编程技术网

Java 使用实体+有什么优势吗&引用;映射为;过度使用身份证?

Java 使用实体+有什么优势吗&引用;映射为;过度使用身份证?,java,jpa,ejb,Java,Jpa,Ejb,这种方法是否有很大的优势: @Entity public class A { @ManyToOne(fetch=FetchType.LAZY) @JoinColumn(name = "ID_B") private B b; } @Entity public class B { @OneToMany(mappedBy = "a", cascade = CascadeType.ALL) private List<A> aList; } 我认为第

这种方法是否有很大的优势:

@Entity
public class A {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "ID_B")
    private B b;
}

@Entity
public class B {
    @OneToMany(mappedBy = "a", cascade = CascadeType.ALL)
    private List<A> aList;
}

我认为第二个更适合于封装(因为我在不同的项目中有A和B类,第二个不需要引用第一个)。

一个优点是,使用适当的JPA关系可以从数据库中获取A,并使用A上的简单getter获取B:
myA.getB()

如果使用长时间,则在需要获取一些B时,需要始终手动再次查询数据库

请注意,您没有义务双向声明关系。像这样的东西是完全正确的:

@Entity
public class A {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "ID_B")
    private B b;
}

@Entity
public class B {
    //no reference to A
}

当然,这完全取决于你想要实现什么

那么,公平地说,在你给出的方法中,关系是单向的,用户tom brito的第一个示例是双向的吗?是的,这是正确的。当然,即使在单向情况下,如果需要,也可以在两个方向上访问关系,但这需要手动数据库查找。如果其他对象需要了解其相关对象,则可以放置双向关系。这与“更好”无关
@Entity
public class A {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "ID_B")
    private B b;
}

@Entity
public class B {
    //no reference to A
}