OneToMany SQL Отношения - PullRequest
       62

OneToMany SQL Отношения

0 голосов
/ 29 мая 2020

Я хочу иметь отношение OneToMany с SQL и отношение 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

Что мне делать?

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
)

Член команды:

@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 голосов
/ 29 мая 2020

Посмотрите на эту часть вашего кода (из Ticket):

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

Вы устанавливаете столбец SQL не null, используя nullable=false.

Однако вы объявили атрибут как TeamMember? и устанавливаете его на null.

Вы можете либо установить teamMember на что-то, что не null перед сохранением, либо установить nullable на true (смотря что вам нужно).

...