gpt4 book ai didi

java - 具有ManyToMany关系的JPA枚举实体

转载 作者:行者123 更新时间:2023-11-30 06:51:54 26 4
gpt4 key购买 nike

我有两个具有多对多关系的实体。我的数据库结构:

Document    Status                  Document_Status
╔════╗ ╔════╦══════════╗ ╔═════════════╦═══════════╗
║ id ║ ║ id ║ status ║ ║ document_id ║ status_id ║
╠════╣ ╠════╬══════════╣ ╠═════════════╬═══════════╣
║ 1 ║ ║ 1 ║ STORED ║ ║ 1 ║ 1 ║
║ 2 ║ ║ 2 ║ APPROVED ║ ║ 2 ║ 1 ║
║ 3 ║ ╚════╩══════════╝ ║ 3 ║ 2 ║
╚════╝ ╚═════════════╩═══════════╝

我想使用枚举来表示状态。

public enum Status {
STORED, APPROVED
}

@Entity
public class Document {

@Id
@GeneratedValue
private long id;

// ??
private Set<Status> statuses;
}

我尝试以这种方式实现它,但解决方案忽略状态表并尝试以 EnumType.ORDINAL 方式从 status_id 创建状态:

@ElementCollection(targetClass = Status.class)
@CollectionTable(name = "Document_Status", joinColumns = @JoinColumn(name = "document_id"))
@Column(name = "status_id", nullable = false)
private Set<Status> statuses;

@Enumerated(EnumType.STRING) 也没有帮助。它开始在 Status 枚举中查找名称为“1”的值。

我可以将枚举包装成实体,如推荐的 here 。但是,是否可以在不创建包装实体的情况下实现呢?

最佳答案

我认为你应该将你的实体编辑为这样

状态

@Entity
public class Status {

public enum StatusEnum {
STORED, APPROVED
}

@Id
@GeneratedValue
private Integer id;

@Enumerated(EnumType.STRING)
@Column(name = "status")
private StatusEnum status;
}

文档

@Entity
public class Document {

@Id
@GeneratedValue
private long id;

@ManyToMany
private Set<Status> statuses;
}

关于java - 具有ManyToMany关系的JPA枚举实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42588401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com