У меня есть две таблицы, как показано ниже:
Student: oneID (primary key), col1, col2, col3, subId, col4
Subject: subID (primary key), col1, col2
Каждому студенту будет назначен ровно один или ни один из предметов.
Таким образом, в случае: один назначенный субъект: subId в Student будет иметь некоторое значение, которое соответствует subID в таблице тем
, а в случае: 0 назначенный субъект: subId в Student будет нулевым.
В приведенном выше сценарии у меня есть запрос левого соединения, как показано ниже:
select st.col1, st.col2, su.col1, su.col2 from Student st left join Subject su on st.subId = su.subId where st.oneId = 'abc'
Как написать точно такой же запрос в Hibernate?
select st.col1, st.col2, su.col1, su.col2 from Student st left join st.sub as su where st.oneId = 'abc'
Выше запросане работает и выдает следующую ошибку:
"org.hibernate.hql.ast.QuerySyntaxException: Path expected for join!"
Чего мне не хватает?
В моем Java-коде я сохранил обе таблицы независимыми.То есть нет никакой связи между определенными таблицами.
Persistence.xml выглядит следующим образом:
<persistence-unit name="myEntityManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>com.myPackage.Student</class>
<class>com.myPackage.Subject</class>
</persistence-unit>
POJO указаны ниже:
Student
@Entity
@Table(name = "STUDENT")
public class Student implements Serializable {
@Id
@Column(name = "ONEID")
private String oneId;
private Subject sub;
//other columns here
public void setSub(final Subject sub) {
this.sub = sub;
}
@OneToOne(cascade = CascadeType.ALL)
public Subject getSub() {
return this.sub;
}
}
Subject
@Entity
@Table(name = "SUBJECT")
public class Subject implements Serializable {
@Id
@Column(name = "SUBID")
private String subId;
//other columns here
}