我目前在使用Hibernate注解时遇到了一对多映射的问题,每当我获取一个对象时,从相关表返回的项目集始终为null(即使我可以在数据库中看到有相应的关系数据)。我在同一类中有一些多对一的关系,它们运行良好。
其他无关的代码已省略以提高可读性。
我有两个表,其中单个成员可以拥有0个或多个成员期限。
实现get(id)方法(位于drop wizards hibernate包中的一部分)
任何提供的帮助都将不胜感激,我已经因此开始失去生存的意志!
其他使用的技术包括DropWizard(用于处理hibernate配置)和MySQL。
其他无关的代码已省略以提高可读性。
我有两个表,其中单个成员可以拥有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)
Member类对应于成员表:
@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;
}
}
MemberMembershipPeriod类对应着member_membership_period表。
@Entity
@Table(name="member_membership_period")
public class MemberMembershipPeriod implements Serializable {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name = "member_membership_period_id")
private int id;
@Column(name = "test_column")
String testColumn;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTestColumn() {
return testColumn;
}
public void setTestColumn(String testColumn) {
this.testColumn = testColumn;
}
}
我的DAO
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);
}
}
实现get(id)方法(位于drop wizards hibernate包中的一部分)
protected E get(Serializable id) {
return (E) currentSession().get(entityClass, checkNotNull(id));
}
任何提供的帮助都将不胜感激,我已经因此开始失去生存的意志!
其他使用的技术包括DropWizard(用于处理hibernate配置)和MySQL。