'AssertionFailure: null identifier when try to save identifying one-to-one relation

I'm trying to make identifying relation with Spring Data JPA.
And following is my (simplified) entities.

@Entity
class AuthorizationCodeEntity(
    @MapsId
    @OneToOne
    @JoinColumn(name = "authorization_id")
    val authorization: AuthorizationEntity
)  {
    @Id
    @field:Size(max = 16)
    val authorizationId: UUID = UUID(0, 0)
}
@Entity
class AuthorizationEntity {
    @OneToOne(mappedBy = "authorization", cascade = [CascadeType.REMOVE])
    val authorizationCodeEntity: AuthorizationCodeEntity? = null
}

But in when I try to save Entity, follow exception occurred.

Caused by: org.hibernate.AssertionFailure: null identifier
    at org.hibernate.engine.spi.EntityKey.<init>(EntityKey.java:51) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.generateEntityKey(AbstractSharedSessionContract.java:559) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.type.OneToOneType.isNull(OneToOneType.java:108) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.type.EntityType.resolve(EntityType.java:463) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.type.EntityType.resolve(EntityType.java:458) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.type.EntityType.replace(EntityType.java:359) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
    at org.hibernate.type.AbstractType.replace(AbstractType.java:164) ~[hibernate-core-5.6.8.Final.jar:5.6.8.Final]
...

When I change my PK to Long(AUTO_INCREMENT), Everything goes well.
But with UUID, null identifier Exception occur.
Does anyone know what's the problem with my code?



Solution 1:[1]

Your code is correct, the problem stands in the val authorizationId: UUID = UUID(0, 0) assignment in your entities: you are always assigning to the UUID field an empty "nil" uuid (all bits set to zero) so hibernate signals about its presence as a null identifier. To solve this issue you can choose to use a GenericGenerator (see for example this answer) to automatically generate a non null UUID for your Entity or everytime manually assign to your field a non null UUID, while there are no issues if you switch your primary key type to Long.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 dariosicily