I have 1 user to many another domain and put this in my code:
User class
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
@Entity
@Table(name = "USUARIO")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_USUARIO",unique = true,nullable = false)
private Long id;
@NotBlank(message = "usuario.cadastro.nome.obrigatorio")
@Column(name = "NOME", unique = true, nullable = false,length = 100)
private String nome;
@Email(message = "usuario.cadastro.email.invalido")
@Column(name = "E_MAIL", unique = true, nullable = false,length = 100)
private String email;
@NotBlank(message = "usuario.cadastro.senha.obrigatoria")
@Column(name = "SENHA", unique = true, nullable = false, length = 10)
private String senha;
@OneToMany(mappedBy = "usuario",fetch = FetchType.LAZY)
@Cascade({CascadeType.ALL})
@Fetch(value = FetchMode.SELECT)
private Set<DiasUsuarioTimeSheet> diasUsuarioTimeSheetList;
public Usuario() {
diasUsuarioTimeSheetList = new LinkedHashSet<DiasUsuarioTimeSheet>();
}
Another class:
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "DIAS_USUARIO_TIMESHEET")
public class DiasUsuarioTimeSheet {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID_DIAS_USUARIO_TIMESHEET",unique = true,nullable = false)
private Long id;
@Column(name = "DIAS_ID_DIAS", unique = true, nullable = false)
private Dias dia;
@ManyToOne
@Cascade({CascadeType.MERGE, CascadeType.SAVE_UPDATE})
@Column(name = "USUARIO_ID_USUARIO", unique = true, nullable = false)
private Usuario usuario;
@Column(name = "TIME_SHEET_ID_TIME_SHEET", unique = true, nullable = false)
private TimeSheet timeSheet;
public DiasUsuarioTimeSheet() {
}
I have error in:
@OneToMany(mappedBy = "usuario",fetch = FetchType.LAZY)
@Cascade({CascadeType.ALL})
@Fetch(value = FetchMode.SELECT)
private Set<DiasUsuarioTimeSheet> diasUsuarioTimeSheetList;
'one to many' attribute value type should not be 'persistence entity'
The following annotation
@Column(name = "USUARIO_ID_USUARIO", unique = true, nullable = false)
should be
@JoinColumn(name = "USUARIO_ID_USUARIO", nullable = false)
the unique=true
attribute doesn't make sense, since it's a ManyToOne association: you'll obviously have several DiasUsuarioTimeSheets referencing the same user.
Similarly, the following annotation
@Column(name = "TIME_SHEET_ID_TIME_SHEET", unique = true, nullable = false)
must be replaced by
@ManyToOne
@JoinColumn(name = "TIME_SHEET_ID_TIME_SHEET", nullable = false)
Add this to your hibernate.cfg.xml file
<mapping class="com.company.models.DiasUsuarioTimeSheet"/>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With