这是我在这里的第一篇文章,希望我做得对。让我看看如何更好地解释我的问题,以便你们能够理解它。
[使用:Eclipse,Hibernate,Smartgwt,Java语言]
其中,我的数据库中有2个表(postgreSQL),它们彼此相关。
基本上,我需要获取会议表中的所有行。所以我希望在查询之后,我应该得到像 Set<Conferences>
这样的东西,集合中的每个对象都包含表格中的信息。
现在,我正在使用Hibernate和Smartgwt来构建这个Web应用程序(对他们来说是新的)。
我的映射文件是在Eclipse中自动创建的。我的类文件也是由Hibernate的代码生成自动创建的。
注意到hibernate执行以下操作:Set<Conferences>
中的每个对象都是会议对象,它有3个属性:
最后一个对象基本上是取自 OrganizerUsers 表的相应对象(并根据会议和 Organizerusers 表之间的关系选择) - 基本上是一个加入操作。
QUERY:
@SuppressWarnings("unchecked")
@Override
public List getConferences() throws IllegalArgumentException {
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction transaction = null;
List conferences = null;
try{
transaction = session.beginTransaction();
conferences = session.createQuery("from Conferences").list();
transaction.commit();
}catch(Exception e){
transaction.rollback();
e.printStackTrace();
}
finally {
session.close();
}
return conferences;
}
结果通过RPC(在smartgwt中)发送到客户端(网页)。上面的查询基本上是一种servlet的一部分。
结果:
客户端收到Set<Conferences>
个会议对象。在网页中输出数据时,我注意到:
Set<Conferences> conferences = [the result from the RPC call];
conferences.getTitle() //works fine, returns title
conferences.getConferenceId() //works fine, returns the id
conferences.getOrganizeruser() //**NULL OBJECT**
confereces.getOrganizeruser()应该返回一个有效的对象,取自 organizeruser 表。那里有一个相应的有效行。
这只是一个例子,但无论我在两个表之间与FK有关系,我都会遇到这个问题。 在相同示例的内置HQL编辑器中执行HQL查询,似乎通过o_O [在Hibernate配置选项卡中]为我提供了正确的信息。是导致休眠还是...... SmartGwt RPC调用?我对此表示怀疑。 通过这种方式,我之前遇到过类似的问题,在查询之后输出了一个空集。我通过急切地取而不是懒惰来修复它(默认)。但我没有让它发挥作用。
其他信息: Conferences.hbm.xml映射文件[编辑 - 删除不重要的东西,并翻译在RO中编写的类名]
<hibernate-mapping>
<class name="com.test.project.shared.Conferences" table="conferences" schema="public">
<id name="conferenceId" type="int">
<column name="conference_id" />
<generator class="assigned" />
</id>
<many-to-one name="organizerusers" class="com.test.project.shared.Organizerusers" fetch="select">
<column name="organizerusers_id" not-null="true" />
</many-to-one>
<property name="title" type="string">
<column name="title" />
</property>
</class>
</hibernate-mapping>
Conference.java类 [编辑 - 删除了不重要的东西,并翻译了用RO编写的类名]
@Entity
@Table(name = "conferences", schema = "public")
public class Conferinte extends LightEntity implements java.io.Serializable {
private int conferenceId;
private Organizerusers organizerusers;
private String title;
public Conferences() {
}
public Conferences(int conferenceId, Organizerusers organizerusers{
this.confereceId = conferenceId;
this.organizerusers = organizerusers;
}
public Conferences(int conferenceId, Organizerusers organizerusers, String title){
this.conferenceId = conferenceId;
this.organizerusers = organizerusers;
this.title = title;
}
@Id
@Column(name = "conference_id", unique = true, nullable = false)
public int getConferenceId() {
return this.conferenceId;
}
public void setConferenceId(int conferenceId) {
this.conferenceId = conferenceId;
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "organizeruser_id", nullable = false)
public Organizerusers getOrganizerusers() {
return this.organizerusers;
}
public void setOrganizerusers(
Organizerusers organizerusers) {
this.organizerusers = organizerusers;
}
@Column(name = "title")
public String getTitle() {
return this.title;
}
public void setTitle(String title) {
this.title = title;
}
}