我正在使用Hibernate和Spring Data。
我有三个表,第一个是复合主键。
table (grupo)
----------------
|PK idGrupo |
|PK nombre |
| |
|______________|
我还创建了2个表usuario和grupo_matricula(Grupo和usuario之间关系的结果很多)。
table (grupo_matricula)
------------------
|PK idgrupos |
| matricula_id |
| grupos_id |
| nombre |
| aceptado |
| propietario |
| |
|_________________|
table (usuario)
----------------
|PK matricula |
| nombre |
| password |
|______________|
我为实体(grupo)创建了3个Clases,其他为实体(grupo_matricula)的grupo的PK EmbeddedId。
@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);
}
当我尝试运行该项目时,它向我显示错误:
Caused by: org.hibernate.AnnotationException: mappedBy reference an unknown target entity property: com.mx.agora.domain.GrupoMatricula.grupo_id in com.mx.agora.domain.Grupo.grupoMatriculas
答案 0 :(得分:0)
mappedBy
属性表示拥有关系的属性名称,而不是列名称。所以,正确的映射是:
@OneToMany(mappedBy = "grupo", cascade=CascadeType.ALL)
答案 1 :(得分:0)
在您的实体mappedBy
中,您的Grupo对象名为@Column
。
这是mappedBy需要的名称。
在此,您向@JoinColumn
提供数据库中ID的名称。我理解您的错误,因为数据库中的属性名称用于Grupo
和@OneToMany(mappedBy = "grupo", cascade = CascadeType.ALL)
private Set<GrupoMatricula> grupoMatriculas = new HashSet<>(0);
注释。
所以在你的@OneToMany( mappedBy = "grupo_id", cascade=CascadeType.ALL)
private Set<GrupoMatricula> grupoMatriculas=new HashSet<>(0);
课程中,你必须把:
@OneToMany
而不是
{{1}}
如果需要,以下是good example使用Hibernate的{{1}}:)