Java Hibernate-返回空对象的OneToMany关系(注释)

Java Hibernate-返回空对象的OneToMany关系(注释),java,mysql,hibernate,dropwizard,Java,Mysql,Hibernate,Dropwizard,我目前正在使用hibernate中的注释进行一对多的映射,每当我得到一个对象时,从相关表返回的项集总是空的(即使我在数据库中看到与数据有对应关系)。我在同一个班级有一些多对一的关系,这些关系很好 为便于阅读,省略了其他无关代码 我有两个表,其中单个成员可以有0个或多个成员期: CREATE TABLE member ( member_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY (member_id) ) CREATE TABLE mem

我目前正在使用hibernate中的注释进行一对多的映射,每当我得到一个对象时,从相关表返回的项集总是空的(即使我在数据库中看到与数据有对应关系)。我在同一个班级有一些多对一的关系,这些关系很好

为便于阅读,省略了其他无关代码

我有两个表,其中单个成员可以有0个或多个成员期:

CREATE TABLE member (
    member_id INT NOT NULL AUTO_INCREMENT
    PRIMARY KEY (member_id)
)

CREATE TABLE member_membership_period (
    member_membership_period_id INT NOT NULL AUTO_INCREMENT ,
    member_id INT NOT NULL ,
    test_column VARCHAR(45) NOT NULL ,
    PRIMARY KEY (member_membership_period_id) ,
    INDEX member_membership_period_member_idx (member_id ASC) ,
    CONSTRAINT member_membership_period_member
        FOREIGN KEY (member_id)
        REFERENCES member (member_id)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
成员类映射到成员表:

@Entity
@Table(name="member")
public class Member implements Serializable  {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name = "member_id")
    private int id;

    @OneToMany
    @JoinColumn(name = "member_id")
    @ForeignKey(name = "member_membership_period_member")
    private Set<MemberMembershipPeriod> memberMembershipPeriods = new HashSet<MemberMembershipPeriod>();

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public Set<MemberMembershipPeriod> getMemberMembershipPeriods() {
        return memberMembershipPeriods;
    }

    public void setMemberMembershipPeriods(Set<MemberMembershipPeriod> memberMembershipPeriods) {
        this.memberMembershipPeriods = memberMembershipPeriods;
    }
}
我的刀

public class MemberDaoImpl extends AbstractDAO<Member> implements MemberDao {

    public MemberDaoImpl(SessionFactory factory) {
       super(factory);
    }

    @Override
    public List<Member> getAllMembers() {
        Query query = currentSession().createQuery("from Member");
        return list(query);
    }

    @Override
    public Member getMemberById(int id) {
        return get(id);
    }
}
如果能提供任何帮助,我都将不胜感激,我已经开始失去继续生活下去的意愿了


使用的另一种技术是DropWizard(它进行hibernate配置)和MySQL,试试这个。这可能对你有帮助

@Override
    public List<Member> getAllMembers() {
        Criteria criteria = currentSession().createCriteria(Member.class,"member");
        criteria.createAlias("member.memberMembershipPeriods","period");
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        return criteria.list();
    }
@覆盖
公共列表getAllMembers(){
Criteria=currentSession().createCriteria(Member.class,“Member”);
criteria.createAlias(“member.membershipPeriods”、“period”);
criteria.setResultTransformer(criteria.DISTINCT\u ROOT\u实体);
返回条件。list();
}

您有一个没有名字的JoinColumn。我不知道那会有什么影响。ForeignKey仅用于生成DDL。指定JoinColumn的名称。尝试使用join列上的名称,但仍然为null。好的,映射看起来很好,因此您可以发布加载实体的代码吗?我添加了DAO,完全忘记了这一点。我需要在其中添加关系吗?(虽然我不需要为我的多人关系加载数据)。你如何加载失败的测试?getById或getAll()?请显示get(id)的实现;
protected E get(Serializable id) {
    return (E) currentSession().get(entityClass, checkNotNull(id));
}
@Override
    public List<Member> getAllMembers() {
        Criteria criteria = currentSession().createCriteria(Member.class,"member");
        criteria.createAlias("member.memberMembershipPeriods","period");
        criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
        return criteria.list();
    }