java - How to create many-to.many association with extra columns? -
i'm using hibernate , spring data.
i have 3 tables, first composite primary key.
table (grupo) ---------------- |pk idgrupo | |pk nombre | | | |______________|
also created 2 more tables usuario , grupo_matricula(result of relation many many between grupo , usuario).
table (grupo_matricula) ------------------ |pk idgrupos | | matricula_id | | grupos_id | | nombre | | aceptado | | propietario | | | |_________________| table (usuario) ---------------- |pk matricula | | nombre | | password | |______________|
i created 3 clases 1 entity (grupo), other pk embeddedid of grupo last entity (grupo_matricula).
@entity @table(name = "grupo") public class grupo implements serializable { @embeddedid protected grupopk grupopk; @onetomany( mappedby = "grupo_id", cascade=cascadetype.all) private set<grupomatricula> grupomatriculas=new hashset<>(0); } @embeddable public class grupopk implements serializable { @column(name = "idgrupo") private string idgrupo; @column(name = "nombre") private string nombre; } @entity @table(name = "grupo_matricula") public class grupomatricula implements serializable { @id @generatedvalue @column(name = "idgrupos") private long idgrupos; @manytoone(cascade = cascadetype.all) @joincolumns({ @joincolumn(name = "idgrupo", insertable = false, updatable = false,referencedcolumnname = "idgrupo"), @joincolumn(name = "nombre", insertable = false, updatable = false,referencedcolumnname = "nombre") }) private grupo grupo; @manytoone(cascade = cascadetype.all) @joincolumn(name = "usuario", referencedcolumnname = "matricula") private user usuario; @column(name = "aceptado") private short aceptado; @column(name = "propietario") private short propietario; } @entity @table(name = "usuario") public class user extends implements serializable { @id @notnull @pattern(regexp = "^[a-z0-9]*$") @size(min = 1, max = 13) @column(name = "matricula",length = 13, unique = true ,nullable = false) private string matricula; @jsonignore @notnull @size(min = 5, max = 100) @column(length = 100) private string password; @size(max = 50) @column(name = "nombre", length = 50) private string nombre; @jsonignore @onetomany(cascade = cascadetype.all, mappedby = "usuario") private set<grupomatricula> grupomatriculaset=new hashset<>(0); }
when try run project, showed me error:
caused by: org.hibernate.annotationexception: mappedby reference unknown target entity property: com.mx.agora.domain.grupomatricula.grupo_id in com.mx.agora.domain.grupo.grupomatriculas
the mappedby
attribute indicates property name owns relationship, not column name. so, proper mapping is:
@onetomany(mappedby = "grupo", cascade=cascadetype.all)
Comments
Post a Comment