0
我使用Spring與Hibernate和我有層次模型的SQL問題。這是我的模型:休眠生成錯誤的查詢與模型中不存在的字段
現在的班級,註釋:
@MappedSuperclass
@Configurable
@Filter(name = "noBorrado")
public abstract class AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Autowired
@Transient
protected AbstractEntityDAO dao;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
private User userCreated;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
private User userUpdated;
@JsonIgnore
@Temporal(TemporalType.TIMESTAMP)
private Calendar dateCreated;
@JsonIgnore
@Temporal(TemporalType.TIMESTAMP)
private Calendar lastUpdated;
@JsonIgnore
@Column(nullable = false, columnDefinition = "bit default 0")
private boolean borrado = false;
}
@MappedSuperclass
@Configurable
@Filter(name="escala")
public abstract class AbstractEntityByEscala extends AbstractEntity implements Serializable {
private static final long serialVersionUID = 1L;
@ManyToOne(fetch=FetchType.LAZY, optional=false)
@JoinColumn(name="ESCALA_ID")
private Escala escala;
}
@Entity
@Table(name="TSH_GENERIC_SOLICITUD")
@Inheritance(strategy=InheritanceType.JOINED)
public class GenericSolicitud extends AbstractEntityByEscala {
private static final long serialVersionUID = 1L;
public enum Estados {
ACEPTADO, RECHAZADO, PENDIENTE_SOLICITADO, PENDIENTE_PLANIFICADOR, CANCELADO
}
@NotEmpty
@ManyToOne
private Empleado empleadoSolicitante;
@NotEmpty
@Enumerated(EnumType.ORDINAL)
private Estados estado;
@NotEmpty
@OneToMany(cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="SOLICITUD_ID")
private List<SolicitudDia> dias;
private Boolean notificacionVista;
/* FILTRADO EMPLEADOS */
@Transient
private List<Estados> _estados;
@Transient
private Calendar _fechaInicio;
@Transient
private Calendar _fechaFin;
@Transient
private Cuadrante _cuadrante;
@Transient
private AreaTrabajo _areaTrabajo;
@Transient
private Departamento _departamento;
@Transient
private Tipo _tipoCalendario;
}
@Entity
@Table(name = "TSH_SOL_INC_CA")
public class SolicitudComunicacionAusencia extends GenericSolicitud {
private static final long serialVersionUID = 1L;
public enum Motivos {
ENFERMEDAD, ASUNTOS_PROPIOS, OTROS
}
@NotEmpty
@Enumerated(EnumType.ORDINAL)
private Motivos motivo;
@Column(length = 200)
private String observaciones;
/* FILTRADO EMPLEADOS */
@Transient
private List<Motivos> _motivos;
}
奧基。如果在我的persistence.xml中,我將屬性「hibernate.hbm2ddl.auto」設置爲「update」。 Hibernate生成正確的模型。這看起來如何下一個圖像:
問題這是SQL查詢失敗,因爲嘗試按「tsh_sol_inc_ca.escala_id」過濾顯然不存在。我的問題是,我該如何解決這個問題。
SELECT DISTINCT solicitudc0_.id AS id1_33_,
solicitudc0_1_.borrado AS borrado2_33_,
solicitudc0_1_.datecreated AS datecrea3_33_,
solicitudc0_1_.lastupdated AS lastupda4_33_,
solicitudc0_1_.usercreated AS USERCREA7_33_,
solicitudc0_1_.userupdated AS USERUPDA8_33_,
solicitudc0_1_.escala_id AS ESCALA9_33_,
solicitudc0_1_.empleadosolicitante AS EMPLEAD10_33_,
solicitudc0_1_.estado AS estado5_33_,
solicitudc0_1_.notificacionvista AS notifica6_33_,
solicitudc0_.motivo AS motivo1_48_,
solicitudc0_.observaciones AS observac2_48_
FROM tsh_sol_inc_ca solicitudc0_
INNER JOIN tsh_generic_solicitud solicitudc0_1_
ON solicitudc0_.id = solicitudc0_1_.id
INNER JOIN tsh_empleados empleado1_
ON solicitudc0_1_.empleadosolicitante = empleado1_.id
INNER JOIN tsh_usuarios empleado1_1_
ON empleado1_.id = empleado1_1_.id
INNER JOIN tsh_horarios horarios2_
ON empleado1_.id = horarios2_.empleado
LEFT OUTER JOIN tsh_cuadrantes cuadrante3_
ON horarios2_.cuadrante = cuadrante3_.id
INNER JOIN tsh_areas_trabajo areatrabaj4_
ON cuadrante3_.areatrabajo = areatrabaj4_.id
INNER JOIN tsh_departamentos departamen5_
ON areatrabaj4_.departamento = departamen5_.id
WHERE 1 = solicitudc0_.escala_id
AND solicitudc0_.borrado = 0
AND 1 = solicitudc0_1_.escala_id
AND solicitudc0_1_.borrado = 0
AND departamen5_.id = 9
AND (Ltrim(Rtrim(Upper(departamen5_.codigo))) LIKE '%RAM%');
PD:我使用的是SQL Server 2008中,和我的英語不好
是的,但它是在tsh_GenericSolicitud – earnaz
如何力創造孩子的此列? – earnaz