【发布时间】:2021-05-02 22:02:56
【问题描述】:
我正在尝试使用 Spring Data JPA 和 MySql 来实现这个简单的想法。我有桌子:
╔════╦═════════════════════╗
║ Id ║ Question ║
╠════╬═════════════════════╣
║ 1 ║ Who are you? ║
║ 2 ║ Whats your name? ║
║ 3 ║ Where are you from? ║
╚════╩═════════════════════╝
╔════╦════════╦═════════╦════════════╗
║ Id ║ UserId ║ Answer ║ QuestionId ║
╠════╬════════╬═════════╬════════════╣
║ 1 ║ 1 ║ Answer1 ║ 1 ║
║ 2 ║ 1 ║ Answer2 ║ 2 ║
║ 3 ║ 1 ║ Answer3 ║ 3 ║
║ 4 ║ 2 ║ Answer4 ║ 1 ║
║ 5 ║ 2 ║ Answer5 ║ 2 ║
║ 6 ║ 2 ║ Answer6 ║ 3 ║
╚════╩════════╩═════════╩════════════╝
然后我想得到User+Question+Answer 的结果。像answersRepository.findAll(); 这样的标准 Spring Data 查询很好
我得到了结果:
╔════════╦═════════╦═════════════════════╗
║ UserId ║ Answer ║ Question ║
╠════════╬═════════╬═════════════════════╣
║ 1 ║ Answer1 ║ Who are you? ║
║ 1 ║ Answer2 ║ Whats your name? ║
║ 1 ║ Answer3 ║ Where are you from? ║
║ 2 ║ Answer4 ║ Who are you? ║
║ 2 ║ Answer5 ║ Whats your name? ║
║ 2 ║ Answer6 ║ Where are you from? ║
╚════════╩═════════╩═════════════════════╝
但是如果问题可以改变,如何实现这个逻辑呢?
像User1 这样的东西回答了Who are you? 的问题,在这个问题被更改为Who are u? 和User2 之后,例如在第二个版本上回答。
我需要结果:
╔════════╦═════════╦═════════════════════╗
║ UserId ║ Answer ║ Question ║
╠════════╬═════════╬═════════════════════╣
║ 1 ║ Answer1 ║ **Who are you?** ║
║ 1 ║ Answer2 ║ Whats your name? ║
║ 1 ║ Answer3 ║ Where are you from? ║
║ 2 ║ Answer4 ║ **Who are u?** ║
║ 2 ║ Answer5 ║ Whats your name? ║
║ 2 ║ Answer6 ║ Where are you from? ║
╚════════╩═════════╩═════════════════════╝
我尝试使用 Spring Data Envers (Hibernate Envers) 来实现这个逻辑,但我认为这不是发明审计的原因。那么我该怎么做呢?也许我需要使用诸如事件溯源技术之类的东西?
【问题讨论】:
标签: java database-design spring-data-jpa spring-data-envers historical-db