2016-11-10 33 views
0

Im在jpa有一些怀疑。例如一个表Post和一个表文件。一篇文章可以有多个文件关联,一个文件关联到一个文章,所以我们有一对多的关系。映射总是在一对多的关系方向

我有疑问知道我们应该创建OneToMany关系还是ManyToOne或两者。例如,在post和files示例中,我们需要了解它的单向还是双向是如果我们想知道一个帖子有哪些文件以及哪些文件在帖子中,对吗?如果它的双方都是双向关系,对吧?但是这两个问题看起来很相似,所以它的正常答案是肯定的。所以它不是一个很好的练习映射总是两个方向?

实施例,映射总是两个方向:

@Entity 
public class Post{ 
@GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @OneToMany(mappedBy="post") 
    private List<Files> files= new ArrayList<>(); 
} 

@Entity 
public class File{ 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 

    @ManyToOne 
    @JoinColumn(name="post_id") 
    private Post post; 
} 

回答

0

这都取决于要求和数据模型。使关系双向不是好的或不好的做法。

如果您希望用户只能通过Post达到Files而不是单向。 否则,如果您需要为用户提供直接搜索文件的功能,并且通过该用户能够查看该文章,请将其设为双向。

如果是双向关系,请确保您创建一个方便的方法来设置FilesPost之间的关系,并且不要忘记使用inverse属性。

+0

感谢您的回答。例如,假设你的第一个例子,如果一个用户只能通过一个帖子访问某些文件,那么它是单向的。但在这种情况下是OneToMany或ManyToOne?你知道如何检查吗? – Ozzy

+0

@Ozzy在单向的情况下 - 您将在Post中拥有一个List文件的List字段,并且您需要在Post中进行映射,当然这将是OneToMany映射 – Ubercool