Results 1 to 2 of 2

Thread: JpaRepository and Hibernate UserType

  1. #1
    Join Date
    Nov 2012
    Posts
    3

    Default JpaRepository and Hibernate UserType

    I have a type that is very much like an enum. In order to allow my entities to have a property of this type, I've created a UserType and registered it globally in the following manner:

    Code:
    @MappedSuperclass
    @TypeDef(defaultForType=My.class, typeClass=MyType.class)
    public class MyType implements UserType {
        // code that marshals to/from a VARCHAR via a name() field on a My object
    }
    Now let's say that I have an entity:

    Code:
    @Entity
    public class MyEntity {
        private My my;
        public My getMy() {
            return my;
        }
        protected void setMy(My my) {
            this.my = my;
        }
        // ... other fields
    }
    This works perfectly with Hibernate. Objects are persisted and deserialized correctly. Now let's create a nice Spring Data Repository:

    Code:
    public interface MyRepository extends JpaRepository<MyEntity, Integer> {
        MyEntity findByMy(My my);
    }
    This does not work. Instead of using the globally-specified MyType for serializing the My object, Spring uses its own logic. This obviously fails. Moreover, when I try to replace the My with a String and call findByMy with my.name(), Spring tries to be too smart for its own good and declares that the given parameter doesn't match the class of the property.

    The conflation of these two issues seems to make it impossible to effectively use UserTypes with Spring Data. Am I missing some XML or other configuration incantation that I must perform to make this work?

  2. #2
    Join Date
    Nov 2012
    Posts
    3

    Default

    This actually turned out to be a limitation with my type. I need to implement not just UserType, but also LiteralType. After implementing that interface as well, all queries work exactly as expected.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •