【发布时间】:2022-01-26 16:50:05
【问题描述】:
我的申请的一些背景:
我正在使用 Spring Boot、Spring Boot Data JPA 和 JDA 在 Java 中开发 Discord-Bot。
该机器人应该在 Discord 中有几个用于不同目的的按钮。当用户单击按钮时,机器人会在事件处理程序中获取按钮的 id(我在创建它时预先给它)。
不同的示例场景:
- ID 为 20 的 Button1 解析为具有 Role1 的角色按钮实体,因此该成员获得了分配的 Role1。
- ID 为 32 的 Button2 解析为带有一些在点击时运行的逻辑的票据按钮实体。
(不同的按钮实体也有不同的字段)
问题:我怎样才能设计出这样的东西?
我想到的一个选项是拥有一个通用按钮实体,以便 JPA 的 id 代表 Discord 中按钮的 id 并存储另一个 id(例如,来自角色按钮实体,以运行它的逻辑与它的字段而不是票按钮实体的逻辑/字段)。
这个选项是否有意义,如果有,是否可以将Long buttonEntityId 与例如级联角色按钮实体?
提前致谢
【问题讨论】:
-
你的意思是不同类型的按钮有一些共同的领域和一些不同的领域?
-
两者的字段只有id,其余字段不同
-
那么,这是 JPA 的问题吗?从实体设计的角度来看,这将是两个不同的实体,唯一的共同点是名称中的 uave“按钮”。会是这样吗?或者可能是我没有做对。
-
没错。但我需要以类似以下流程的方式解析这些 id:用户单击按钮 -> 使用 id 调用事件处理程序 -> 获取按钮(所以角色按钮或票证按钮,此时我不知道按钮的类型对应于数据库中的 id) -> 根据按钮实体类型调用角色处理程序或票证处理程序,并在处理程序中执行一些逻辑。
-
我不会使用 Id 来区分元素类型,而是使用特定的
type属性。您不能创建带有type属性的按钮(理想情况下由enum管理,但普通的String可以完美匹配)可用于调用处理程序?
标签: java jpa spring-data-jpa