Java 在多对多连接中获取数据

Java 在多对多连接中获取数据,java,database,hibernate,many-to-many,Java,Database,Hibernate,Many To Many,我的hibernate数据库连接有问题。首先,我发布了一些数据: 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 Str

我的hibernate数据库连接有问题。首先,我发布了一些数据:

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 
     */
}
@实体
@表(name=“objects”,schema=“genmeta”)
公共类对象{
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私人内部身份证;
私有字符串o_名称;
私有字符串o_desc;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name=“genmeta.object\u tg\u assc”,joinColumns={@JoinColumn(name=“o\u id”)},inverseJoinColumns={@JoinColumn(name=“tg\u id”)})
私有集模板组;
@短暂的
私有布尔templateGroupsLoaded=false;
/**
*接球手和接球手
*/
}
TemplateGroup.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 
     */
}
公共类模板组{
@身份证
@列(unique=true,nullable=false)
私用国际电话号码;
私有字符串tg_名称;
私有字符串tg_desc;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy=“templateGroups”)
私有集合对象;
/**
*接球手和接球手
*/
}
我的问题是,以后如何从类对象中获取数据

这是我的第一次尝试: 代码示例:

public Set<TemplateGroup> loadTemplateGroups(Objects myObjects) {
    Session session = factory.openSession();
    Set<TemplateGroup> myTG = myObjects.getTemplateGroups();
    session.close();
    return myTG;
}
公共集LoadTemplateGroup(对象MyObject){
Session Session=factory.openSession();
设置myTG=myObjects.getTemplateGroups();
session.close();
返回myTG;
}
非常感谢

致意
Björn

未能延迟初始化角色集合:db.hibernate.classes.Objects.templateGroups,无法初始化代理-不会引发任何会话
异常,因为您正在一个事务中检索
对象
实例,并在另一个事务中调用
getTemplateGroups()
(或在提交第一个事务后)。不应打开另一个会话以获取模板组

您需要执行以下操作:

Session session = factory.openSession();
Objects object = <Code to retrieve the Objects instance>
Set<TemplateGroup> templateGroups = object.getTemplateGroups();
templateGroups.size(); // as an example
session.close();
Session Session=factory.openSession();
Objects object=<检索对象实例的代码>
Set templateGroups=object.getTemplateGroups();
templateGroups.size();//作为示例
session.close();

您不需要显式检索TemplateGroup列表。当您从
对象
实例访问
TemplateGroup
集时,hibernate将基于映射触发一个查询,并用正确的数据填充列表。您得到的是一个空集吗?是的。由于这个集,我认为我必须加载数据集就像这样。你知道我的另一种方法吗?当你访问
模板组时,你必须启用hibernate sql日志记录并检查hibernate生成和记录的sql。你有一个例子给我吗?不知道你的意思。每个人都说:“当你访问模板组时”。怎么做?如果你做一个简单的
对象。getTemplateGroups()
,hibernate将启动查询以获取集合的内容。在hibernate配置文件中,您可以启用sql日志记录。例如,
true
。有关详细信息,请查看此链接。