postgresql 无法将@ElementCollection配置为根据需要工作

4ngedf3f  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(119)

我有以下Postgres DB表:

isopod=# select * from users;
 id | username | password | registered_at |       isopods        |                badges                
----+----------+----------+---------------+----------------------+--------------------------------------
  1 | mike     | mike     | now           | ISO.C.001, ISO.A.001 | badge1, badge2
(1 row)

isopod=# select * from isopods;
    id      | name  | size  | generation | type  | rarity |  icon  
----+-------+-------+------------+-----------------+--------+--------
  ISO.C.001 | AMBER | SMALL | CUBARIS    | type1 | RARE   | icon01
(1 row)

我正在尝试将我的Java类连接到这个DB。对于单字符串,一切都很好,但我在配置private List<String> isopods时遇到了问题。
我的Java用户类:

@Entity
@Table(name = "users")
public class User implements Serializable {

    @Id
    private String id;
    private String username;
    private String password;
    private String registeredAt;
    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name="isopods", joinColumns=@JoinColumn(name="id"))
    private List<String> isopods = new ArrayList<>();
    @ElementCollection
    private List<Badge> badges;

我的Java Isopod类:

@Entity
@Table(name = "isopods")
public class Isopod implements Serializable {

    @Id
    private String id; //ISO.C.001
    private String name;
    private String size;
    private String generation;
    private String type;
    private String rarity;
    private String icon;

我的目标是连接Isopod ID和User isopods列表。或者更好的重构用户的List<String> isopods to List<Isopod>我尝试了@CollectionTable的不同组合,但都不起作用。使用上述设置,错误如下:

2023-04-30 12:30:51.284 ERROR 30955 --- [nio-8080-exec-1] o.h.engine.jdbc.spi.SqlExceptionHelper   : ERROR: column isopods0_.isopods does not exist

有没有人能告诉我我做错了什么?
谢谢你

j5fpnvbx

j5fpnvbx1#

你的模式看起来非常奇怪。这不是关系数据库中应该表示的关联。相反,您应该有一个单独的关联表来保存用户和isopods之间的关联。
无论如何,JPAMap不能处理这种(不好的)事情。必须将isopods列Map为常规基本类型。

相关问题