Skip to content

Problem reading Shadows with EmbeddedId #886

@tkuprevich

Description

@tkuprevich

I'm using javers 5.7.2 and have a problem reading nested collection of AgreementMember objects in Agreement. It's a regilar OneToMany relation except AgreementMember has a composite primary key. Here are the classes:

Agreement.java:

@TypeName("Agreement")
public class Agreement
{
    @Id
    private UUID agreementId;

    private UUID locationId;

    @OneToMany(mappedBy = "agreement", cascade = CascadeType.ALL, orphanRemoval = true)
    @ShallowReference
    private List<AgreementMember> agreementMembers;

    //other fields ...
}

AgreementMember.java: with AgreementMemberId as primary key:

@TypeName("AgreementMember")
public class AgreementMember
{
    public AgreementMemberId getId()
    {
        return agreementMemberId;
    }


    @Embeddable
    @TypeName("AgreementMemberId")
    public static class AgreementMemberId implements Serializable
    {
        private UUID agreementId;
        private UUID memberId;
    }

    @EmbeddedId
    private AgreementMemberId agreementMemberId;

    //other fields ...
}

Here is a snapshot

[
   Snapshot   {
      commit:1.0,
      id:Agreement/a3ffda86-ba8b-4640-bd03-4ad945aa2546,
      version:1,
      (agreementId:a3ffda86-ba8b-4640-bd03-4ad945aa2546,
      agreementMembers:[
         AgreementMember/a3ffda86-ba8b-4640-bd03-4ad945aa2546,
         50527728-0f56-4403-8651-7f9eff2dda93
      ],
      locationId:1b1e5b47-ba10-4bb7-9f04-6b81d1c66422)
   }
]

And here is an exception when I'm trying to read shadows:

org.javers.shadow.ShadowGraphBuilder#assembleShallowReferenceShadow java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at path $.agreementMemberId

And here is my test:

@Test
void testAgreement()
{
    //given
    Javers javers = JaversBuilder.javers()
            .withListCompareAlgorithm(ListCompareAlgorithm.SIMPLE)
            .build()

    Agreement agreement = new Agreement()
    agreement.agreementId = UUID.randomUUID()
    agreement.locationId = UUID.randomUUID()

    AgreementMember.AgreementMemberId agreementMemberId = new AgreementMember.AgreementMemberId()
    agreementMemberId.agreementId = agreement.agreementId
    agreementMemberId.memberId = UUID.randomUUID()

    AgreementMember agreementMember = new AgreementMember()
    agreementMember.agreementMemberId = agreementMemberId

    List<AgreementMember> agreementMemberList = new ArrayList<>()
    agreementMemberList.add(agreementMember)
    agreement.agreementMembers = agreementMemberList

    javers.commit("Agreement", agreement)

    JqlQuery query = QueryBuilder.byInstanceId(agreement.agreementId, Agreement.class).build()
    List<Shadow<Agreement>> shadows = javers.findShadows(query)
    println shadows
}

Any help is greatly appreciated. This might me misconfiguration or something, please advice.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions