AccessType.PROPERTY and setter problem on Map


#1

That’s make several days I came across a problem I post on Stackoverflow:

I wrote a UnitTest that reproduce this and I think maybe there is an issue here.


#2

I wrote a UnitTest that reproduce this and I think maybe there is an issue here.

Indeed, there is an issue, but not in Hibernate, it’s because you used the Collection Clear Anti-Pattern.


#3

Ok I made some debugging and what a surprize when I discover that during persist method when the setter is called by reflection, the value argument become empty???

Seriously, there’s something I don’t understant. Then I try to wrap my the map arguments in an inner-method map and it’s work???

Working example:

    public void setMyEnumsByProperty(final Map<MyEnum, Integer> myEnums) {
        // if not wrapped, the map become empty after clear is called!!!!
        Map<MyEnum, Integer> temp = new EnumMap<>(myEnums);
        this.myEnumsByProperty.clear();
        for (MyEnum myEnum : temp .keySet()) this.myEnumsByProperty.put(myEnum, temp .get(myEnum));
    }

#4

I’m sorry to insist but there’s something not clear here… And I really think there’s an issue.


#5

And I really think there’s an issue.

In the true spirit of open-source software development, if you think you found an issue, then you have to open a Jira issue.

Don’t forget to add a replicating test case as well, otherwise, the issue will get closed.

More, if this problem is important to you, then you should provide a Pull Request with a fix too.

Looking forward to getting your contribution.


#6

Thank you!
I follow your advice.


#7

[HHH-13289] Setter improper behavior on entity with AccessType.PROPERTY - Hibernate JIRA

I created this JIRA issue. But it’s the first time and I’m not sure I’ve done it correctly.