Witam,
Mam problem ze stworzeniem mappingu JPA do wywoływanego zapytania SQL.
Używam Hibernate 3.2.6ga.
Mając klasę:
@Entity(name="test.entity.Student")
@Table(name="`Students`")
@NamedNativeQueries({
@NamedNativeQuery(
name = "getStudentList",
query = "SELECT " +
"st.\"StudentId\" as StudentId," +
"st.\"Name\" as Name," +
"st.\"Surname\" as Surname," +
"st.\"AddressId\" as AddressId" +
"FROM " +
"\"getStudentList\"(?) AS st " +
"ORDER BY " +
st."\"Surname\" ASC",
resultSetMapping = "Student"
)
})
@SqlResultSetMappings({
@SqlResultSetMapping(name="Student", entities={
@EntityResult(entityClass = Student.class, fields = {
@FieldResult(name="StudentId", column = "StudentId"),
@FieldResult(name="Name", column = "Name"),
@FieldResult(name="Surname", column = "Surname"),
@FieldResult(name="AddressId", column = "AddressId")
})
}
)})
public class Student implements Serializable {
private static final long serialVersionUID = 2398501228962124869L;
@Id
@Column(name="`Student`")
private Integer Student;
@Column(name="`ClientId`")
private Integer ClientId;
@Column(name="`Name`")
private String Name;
@Column(name="`Surname`")
private String Surname;
@Column(name="`AddressId`")
private Integer AddressId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "`AddressId`", updatable = false, insertable = false)
private Address Address;
public Integer getStudent() {
return Student;
}
public void setStudent(Integer student) {
Student = student;
}
public Integer getClientId() {
return ClientId;
}
public void setClientId(Integer clientId) {
ClientId = clientId;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public String getSurname() {
return Surname;
}
public void setSurname(String surname) {
Surname = surname;
}
public Integer getAddressId() {
return AddressId;
}
public void setAddressId(Integer addressId) {
AddressId = addressId;
}
public Address getAddress() {
return Address;
}
public void setAddress(Address address) {
Address = address;
}
}
Przy wywoływaniu query rzucany jest wyjątek, że nie ma kolumny AddressId3_16_0.
Jeżeli w mappingu i zapytaniu dam nazwę kolumny 'AddressId3_16_0' jest ok, ale jest to nazwa kolumny tworzona przez Hibernate - więc nie jest stała. Działa również, jeżeli usunę joina dla pola Address, więc podejrzewam, że ma to z tym związek.
Być może w kodzie są drobne błędy ponieważ całość uprościłem trochę na potrzeby forum.
Pozdrawiam.