使用Spring Boot JPA来建模包含字符串映射到自定义对象的实体

问题描述 投票:0回答:1

a

Company

(例如001),
  • 可以有很多用户(例如[电子邮件保护]
    ),

  • 每个User可以有许多应用程序(例如演示),

  • each

    Application
    将与它有1个相关的

    Emitter
  • ,它基本上包含一个ID(例如1234-5678)。
  • 这里是层次结构的树:
    .
    ├── 001
    │   ├── [email protected]
    │   │   └── test
    │   │       └── EmitterId (1234-5678)
    │   └── [email protected]
    │       ├── test
    │       │   └── EmitterId (9876-5432)
    │       └── demo
    │           └── EmitterId (9876-9876)
    └── 002
        └── [email protected]
            └── demo
                └── EmitterId (1234-5678)
    
    我的目标是能够通过提供3个数据来查询数据库以获取发射极ID:

Company(001) +

用户(
[电子邮件保护]
) +

Application(测试)

  1. =1234-5678
  2. 如果我知道这些值的预期,我应该能够获取关联的emitterId值。 我不太熟悉使用JPA建模a,是我的第一次尝试,但我觉得这不是解决问题的正确方法。 有人可以对如何更好地建模提供一些见解? 我使用与冬眠的Liquibase集成基于实体类生成ChangElog。 我希望
  3. Map
  4. 也是键的主要钥匙。
  5. Company

Map

import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.Id; import java.util.Map; @Entity public class Company { @Id private String id; @ElementCollection private Map<String, User> users; // getters / setters }

User.java

import jakarta.persistence.ElementCollection; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.ManyToOne; import java.util.Map; @Entity public class User { @Id private String id; @ElementCollection private Map<String, Application> applications; @ManyToOne private Company company; // getters / setters }

Application.java
@Entity
public class Application {

  @Id
  private String id;

  @ManyToOne
  private User user;

  private Emitter emitter;

  // getters / setters
}

	

尚不清楚您要如何在数据库中表示此表示。您的一些评论表明用户有很多公司(不是很多),所以我怀疑您希望一个“应用程序”也有很多用户和公司:

Company
| id |名称|
| -  | ---- |
| 1 | 001 |
| 2 | 002 |

用户 | id |名称| | - | ---- | | 1 |
[电子邮件受保护]
| | 2 |

[电子邮件受保护]

|

申请 | id |名称| | - | ---- | | 1 |测试| | 2 |演示|
Emitter
| id |
| -  |
| 1234-5678 |
| 9876-5432 |
| 9876-9876 |

要加入全部,您需要一个单独的表:
emitter_ryations
| emitter_id | user_id | company_id | app_id |
| -  | -  | -  |  -  |
| 1234-5678 | 2 | 1 | 1 |
| 9876-5432 | 1 | 1 | 1 |
| 9876-9876 | 1 | 1 | 2 |
| 1234-5678 | 1 | 2 | 2 |
您可以像上面一样使用生成的ID,也可以使用用户,公司,应用程序名称字段作为ID,而不是在需要的情况下更容易。我更喜欢总体生成的ID,尽管使用名称的查询需要加入 - 因此取决于您。

使用名称为ID,我将其模拟为:
Emitter.java
java spring-boot hibernate jpa hashmap
1个回答
0
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.