我有以下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
有没有人能告诉我我做错了什么?
谢谢你
1条答案
按热度按时间j5fpnvbx1#
你的模式看起来非常奇怪。这不是关系数据库中应该表示的关联。相反,您应该有一个单独的关联表来保存用户和isopods之间的关联。
无论如何,JPAMap不能处理这种(不好的)事情。必须将
isopods
列Map为常规基本类型。