[InvalidDataAccessApiUsageException] Spring Data JPA / Hibernate

dmike

Bekanntes Mitglied
Java:
org.springframework.dao.InvalidDataAccessApiUsageException: Undeclared path [b]entity[/b]; nested exception is java.lang.IllegalArgumentException: Undeclared path event

Wie bekomme ich das am besten in den Griff. Im Prinzip mache ich nix besonderes. Ein Klasse Entity ist die Oberklasse von SubEntity. Über Spring Data JPA formuliere ich ein predicate gegen die SubEntity-Klasse, benutze in dem Predicate aber eine Eigenschaft der Oberklasse.

Aber dadurch, dass ich @Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) benutze, ist defacto die SubEntity Tabelle der Datenbank eine 1:1 Kopie der Entity-Tabelle und besitzt damit zum Beispiel auch eine Spalte "NAME". Daher frage ich mich weshalb die Entity Tabelle anscheinend doch noch im Query berücksichtigt wird. Danke für Eure Hilfe !

Java:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Table(name="ENTITY")
public class Entity extends AbstractPersistenceEntity  {

    @OneToMany(cascade= {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE}, targetEntity=Entity.class)
    private Set<Entity> children= new HashSet<Entity>();

    @ManyToOne(cascade= {CascadeType.PERSIST, CascadeType.MERGE}, targetEntity=Event.class)
    private Entity parentEntity;

    @Column(name = "NAME")
    private String name;

}

Java:
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@Table(name="SUBENTITY")
public final class SubEntity extends Entity {
}


Java:
@Service
public class SubEntityFinder  {

    @Autowired
    private SubEntityRepository repository;

    public Iterable<SubEntity> findSome(BooleanExpression  predicate) {
              return Iterable<SubEntity> entities = repository.findAll(predicate);  
    }
}

Java:
public interface SubEntityRepository extends JpaRepository<SubEntity, Long>,
                                                  QueryDslPredicateExecutor<SubEntity> {
}

Java:
BooleanExpression predicate = QSubEntity.subEntity.name.eq("CHUCK");   /* Spring Data JPA */
new SubEntityFinder().findSome(predicate); /* booom siehe oben */
 

Zurück
Oben