英文:
OneToMany SQL Relationships
问题
我想要在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:
列'team_member_id'不能为空
我该怎么办?
Ticket:
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
)
TeamMember:
@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()
)
英文:
I want to have a OneToMany
relationship with SQL, and a ManyToOne
relationship. I have a Ticket entity, and a TeamMember entity. However, when I first save the Ticket entity, I will not know the TeamMember, and if I set it to null I get this:
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
What should I do?
Ticket:
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
)
TeamMember:
@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()
)
答案1
得分: 0
看看你代码中的这部分(关于 Ticket
的):
@JoinColumn(name = "team_member_id", nullable = false)
val teamMember: TeamMember? = null
你使用 nullable=false
将 SQL 列设置为非 null
。
然而,你将属性声明为 TeamMember?
并且将其设置为 null
。
在持久化之前,你可以将 teamMember
设置为非 null
的值,或者根据需要将 nullable
设置为 true
。
英文:
Look at this part of your code (of Ticket
):
@JoinColumn(name = "team_member_id", nullable = false)
val teamMember: TeamMember? = null
You set the SQL column to be non-null
using nullable=false
.
However, you declared the attribute as TeamMember?
and you set it to null
.
You can either set teamMember
to something that is not null
before persisting it or set nullable
to true
(depending on what you need).
专注分享java语言的经验与见解,让所有开发者获益!
评论