¿Extendiendo la class de datos de Kotlin para usar con JPA?

Kotlin tiene una class de Data que implementa equals y hashcode automáticamente, pero estos aún no se pueden usar automáticamente en un context JPA.

Para remediar esto, me preguntaba qué se necesitaría para extender el tipo de Data para asignar una "key comercial" o una propiedad de id que sea final y non updatable y se inicialice con un UUID que sirva como key comercial . y los methods equals() y hashcode() usan esa propiedad para su implementación.

Estaba pensando más o less algo como esto:

 jpa class User(id: JpaId, val name: String, val age: Int) jpa class User(bid: JpaBid, val name: String, val age: Int) 

En lugar de usar una class de Data como esta:

 data class User(bid: long, val name: String, val age: Int) 

Estamos usando un nuevo tipo de class jpa . También tenemos dos types nuevos, JpaId y JpaBid que se usan para determinar si la propiedad del identificador debe ser un UUID o una key comercial, como un número ISBN, sku, etc.

Si se usa un tipo JpaId , la key se genera automáticamente. Si se utiliza un JpaBid , la key debe suministrarse en el constructor. Esto garantizaría que tan pronto como se construya una entidad JPA, pueda identificarse de manera única. ¿Pensamientos? ¿Es algo que es muy sencillo de hacer en Kotlin, o tenemos que levantarnos en la parrilla de JVM (nuevo para Kotlin)?