java - 一对多 SQL 关系

标签 java jpa kotlin one-to-many

我希望与 SQL 建立 OneToMany 关系,以及 ManyToOne 关系。我有一个 Ticket 实体和一个 TeamMember 实体。但是,当我第一次保存 Ticket 实体时,我不会知道 TeamMember,如果我将其设置为 null,我会得到以下结果:

2020-05-29 23:49:55.754  
ERROR 24020 --- [onPool-worker-2]  o.h.engine.jdbc.spi.SqlExceptionHelper:  
Column 'team_member_id' cannot be null

我应该做什么?

门票:

data class Ticket(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id:Long = 0,
    val ticketId:String,
    var price:Int? = null,
    val openDate:LocalDateTime = LocalDateTime.now(),
    var closeDate:LocalDateTime? = null,
    var paypalId:String? = null,
    var paid:Boolean = false,
    var status:TicketStatus = TicketStatus.OPEN,
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "team_member_id", nullable = false)
    val teamMember: TeamMember? = null,
    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "customer_id", nullable = false)
    val customer:Customer
)

团队成员:

@Entity
data class TeamMember(
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    var id:Long = 0,
    val discordId:String,
    val joinDate:LocalDateTime,
    val ordersCompleted:Int,
    val amountMade:Int,
    val email:String,
    val pastWork:String,
    @OneToMany(mappedBy = "teamMember", cascade = [CascadeType.ALL],
            orphanRemoval = true, fetch = FetchType.EAGER)
    val tickets:Set<Ticket> = setOf()
)

最佳答案

查看这部分代码(Ticket):

@JoinColumn(name = "team_member_id", nullable = false)
val teamMember: TeamMember? = null

您可以使用 nullable=false 将 SQL 列设置为非 null

但是,您将该属性声明为 TeamMember? 并将其设置为 null

您可以在持久化之前将 teamMember 设置为非 null 的值,或者将 nullable 设置为 true (取决于您的需要)。

关于java - 一对多 SQL 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62087893/

相关文章:

java - Hibernate 中使用 Criterion 的嵌套查询

java - 热衷于在 Java 中使用 Kafka Streams 创建差异流?

java - 用于关闭 FileWriter 的哨兵值 (Java)

mysql - JPA - 没有名为 {{NAME_HERE}} 的 EntityManager 的持久性提供程序

java - 我想知道,有没有更有效的方法来做到这一点

java - Java 文字真的是常量吗?

java - 在构造函数上使用带有时间戳的 JPA SELECT NEW 时出错

android - 我一次可以观察多少个 Stateflow?

android - 如何找出前一个 fragment 正在使用导航组件

kotlin - 具有多个值的函数不返回