Java Hibernate-返回空对象的OneToMany关系(注释)
我目前正在使用hibernate中的注释进行一对多的映射,每当我得到一个对象时,从相关表返回的项集总是空的(即使我在数据库中看到与数据有对应关系)。我在同一个班级有一些多对一的关系,这些关系很好 为便于阅读,省略了其他无关代码 我有两个表,其中单个成员可以有0个或多个成员期: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
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();
}