Any types do not have a unique referenced persister

i got ‘any types do not have a unique referenced persister’ when i try do use criteria with @ManyToAny.

context

@AnyMetaDef(name= "EntityMetaDef", metaType = "string", idType = "long",
    metaValues = {
            @MetaValue(value = "C", targetEntity = Customer.class),
            @MetaValue(value = "R", targetEntity = Restaurant.class)
    }
)

public interface BusinessEntity {
}

@Entity
@Table(name = "user_account")
public class UserAccount implements Serializable {
  ...
   @ManyToAny(
            metaDef = "EntityMetaDef",
            metaColumn = @Column(name = "entity_type")
            
          )
     @Cascade({org.hibernate.annotations.CascadeType.ALL})
     @JoinTable(name = "user_account_entity",
           joinColumns = @JoinColumn(name = "user_account_id"),
           inverseJoinColumns = @JoinColumn(name = "entity_id")
          )
	private List<BusinessEntity> entitys = new ArrayList<>();
  
}

if i try to find a customer with criteria :

criteria.createAlias("entitys", "entity")  
            .add(Restrictions.and(
                Restrictions.eq("entity.id", 12),
                Restrictions.eq("entity.class", Customer.class)
            ));

i got :

java.lang.UnsupportedOperationException: any types do not have a unique referenced persister
	at org.hibernate.type.AnyType.getAssociatedJoinable(AnyType.java:489)
	at org.hibernate.loader.JoinWalker.addAssociationToJoinTree(JoinWalker.java:218)
	at org.hibernate.loader.JoinWalker.addAssociationToJoinTreeIfNecessary(JoinWalker.java:187)
	at org.hibernate.loader.JoinWalker.walkCollectionTree(JoinWalker.java:333)
	at org.hibernate.loader.JoinWalker.addAssociationToJoinTree(JoinWalker.java:257)
	at org.hibernate.loader.JoinWalker.addAssociationToJoinTreeIfNecessary(JoinWalker.java:187)
	at org.hibernate.loader.JoinWalker.walkEntityAssociationTree(JoinWalker.java:401)
	at org.hibernate.loader.JoinWalker.walkEntityTree(JoinWalker.java:515)
	at org.hibernate.loader.JoinWalker.walkEntityTree(JoinWalker.java:282)
	at org.hibernate.loader.AbstractEntityJoinWalker.initAll(AbstractEntityJoinWalker.java:66)
	at org.hibernate.loader.AbstractEntityJoinWalker.initAll(AbstractEntityJoinWalker.java:58)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:106)
	at org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:75)
	at org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:80)
	at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1908)
	at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:370)

did someone can explain how to do this simple query ? i try to do it with sqlRestrictions but i can’t add the join this the sub-table user_account_entity…

i find a way to do this with :

Restrictions.sqlRestriction(
							"{alias}.id in (select user_account_id from user_account_entity where entity_type='C' and entity_id="
									+ customerId + ")")

but it s little bit ugly… :slight_smile: