【发布时间】:2014-07-08 16:12:51
【问题描述】:
我的休眠数据库连接出现问题。首先我发布一些数据:
Objects.java:
@Entity
@Table (name = "objects", schema="genmeta")
public class Objects {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int o_id;
private String o_name;
private String o_desc;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinTable(name = "genmeta.object_tg_assc", joinColumns = { @JoinColumn(name = "o_id") }, inverseJoinColumns = { @JoinColumn(name = "tg_id") })
private Set<TemplateGroup> templateGroups;
@Transient
private boolean templateGroupsLoaded = false;
/**
* Getters and Setters
*/
}
模板组.java:
public class TemplateGroup {
@Id
@Column(unique=true, nullable=false)
private int tg_id;
private String tg_name;
private String tg_desc;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "templateGroups")
private Set<Objects> objects;
/**
* Getters and Setters
*/
}
我的问题是,我以后如何从我的类 Object 中获取数据?
这是我的第一次尝试: 代码示例:
public Set<TemplateGroup> loadTemplateGroups(Objects myObjects) {
Session session = factory.openSession();
Set<TemplateGroup> myTG = myObjects.getTemplateGroups();
session.close();
return myTG;
}
非常感谢。
最好的问候 比约恩
【问题讨论】:
-
您不需要显式检索 TemplateGroup 列表。当您从
Objects实例访问templateGroups集时,hibernate 将触发基于映射的查询并使用正确的数据填充列表。你得到的是一个空集吗? -
是的。因为这个 Set 我想,我必须像这样加载数据。你知道我的另一种方式吗?
-
当您访问
templateGroups时,您必须启用hibernate sql logging并检查hibernate生成和记录的SQL。 -
你有我的例子吗?不知道你的意思。每个人都说:“当您访问 templateGroups 时”。怎么样?
-
如果你做一个简单的
object.getTemplateGroups(),hibernate 会触发一个查询来获取集合的内容。在休眠配置文件中,您可以启用 sql 日志记录。例如,<property name="show_sql">true</property>。查看此链接了解更多详情,stackoverflow.com/questions/2536829/hibernate-show-real-sql。
标签: java database hibernate many-to-many