Skip to content

Instantly share code, notes, and snippets.

@mikeycmccarthy
Created January 23, 2012 15:05
Show Gist options
  • Save mikeycmccarthy/1663559 to your computer and use it in GitHub Desktop.
Save mikeycmccarthy/1663559 to your computer and use it in GitHub Desktop.
Single Relationship Persistance
...domain model
@NodeEntity
public class Member {
@GraphId
private Long graphId;
@Indexed
private Long memberId;
@RelatedToVia(type = "REFERRAL", direction = Direction.INCOMING)
private Referral referer;
@RelatedToVia(type = "REFERRAL", direction = Direction.OUTGOING)
private Set<Referral> referees;
public Member() {
}
public Member(Long memberId) {
this.memberId = memberId;
}
public Long getMemberId() {
return memberId;
}
public void refer(Member memberToRefer){
referees.add(new Referral(this, memberToRefer));
}
public Referral getReferer() {
return referer;
}
public Set<Referral> getReferees() {
return referees;
}
}
... relationship
@RelationshipEntity(type = "REFERRAL")
public class Referral {
@GraphId
private Long graphId;
@EndNode
private Member referee;
@StartNode
private Member referrer;
public Referral() {
}
public Referral(Member referrer, Member referee) {
this.referrer = referrer;
this.referee = referee;
}
}
...and failing test
@Test
public void testAddReferral() throws Exception {
Long firstMemberId = 201L;
memberRepository.save(new Member(firstMemberId));
Member firstMember = memberService.findMember(firstMemberId);
Long secondMemberId = 202L;
memberRepository.save(new Member(secondMemberId));
Member secondMember = memberService.findMember(secondMemberId);
firstMember.refer(secondMember);
memberRepository.save(firstMember);
Member firstMemberAfterPersistence = memberService.findMember(firstMemberId);
Member secondMemberAfterPersistence = memberService.findMember(secondMemberId);
assertEquals(1, firstMemberAfterPersistence.getReferees().size());
assertNull(firstMemberAfterPersistence.getReferer());
assertNotNull(secondMemberAfterPersistence.getReferer());
assertEquals(0, secondMemberAfterPersistence.getReferees().size());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment