ala*_*eno 6 java postgresql orm hibernate jpa
我有一个固定深度为4的分层数据结构.为了更好地理解,我们假设以下(只是一个例子):
因此,级别之间始终存在1-N关系.
一个非常重要的用例(给定一个国家的id)是一次加载一个国家的整个"内容",对数据库的性能影响最小.
在第一个天真的方法中,我在Java中创建了4个授权类,其中实体"Country"包含"State"类型的列表,实体"State"包含"County"类型的列表,依此类推......但是之后JPA创建的当然不是4个表,而是7个(4个实体+ 3个用于1-N之间的连接).我不知道这是否是一个很好的解决方案,因为引擎盖下有很多加入.
我还试图将子类型映射到它们的父类型(一个城市属于一个县,一个县属于一个州,一个州属于一个国家).这导致4个表,但是从应用程序的角度来看,一次检索所有数据变得更加困难.如果我没错,我需要4个不同的请求而不是一个.
我怎么能解决这个问题?有没有办法将简单的表格布局(有四个表,而不是七个)与易于使用的实体类(父类型应该知道它的子节点)相结合?如果没有,你怎么会意识到这一点?
我正在使用JPA与Hibernate和PostgreSQL.
@JoinColumn您可以通过使用注释而不是@JoinTable我怀疑您正在使用的注释来避免 3 个额外的映射表。
例如:
国家
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, mappedBy="country")
private List<State> stateList;
Run Code Online (Sandbox Code Playgroud)
状态
@ManyToOne
@JoinColumn(name="country_id")
private Country country
Run Code Online (Sandbox Code Playgroud)
数据库表如下:
国家
country_id => primary key
Run Code Online (Sandbox Code Playgroud)
状态
state_id => primary key
country_id => foreign key
Run Code Online (Sandbox Code Playgroud)
这样就可以避免所有 4 个实体之间的映射表。
| 归档时间: |
|
| 查看次数: |
5406 次 |
| 最近记录: |