I would like to use the JPA 2.0 Type expression in a spring data JPA repository @Query but it give me a validation error Validation failed for query for method public abstract java.util.List my.org.FooRepository.findAllByRoomCode()!.
Here is my entities definition :
inherited :
@Entity(name = "Location")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class LocationEntity {
@Column(name = "CODE")
protected String code;
@OneToMany(mappedBy = "location")
protected List<LampEntity> lamps = new ArrayList<LampEntity>();
...
}
@Entity(name = "Floor")
@Table(name = "FLOOR", uniqueConstraints = {
@UniqueConstraint(name = "FLOOR_UK", columnNames = "CODE")
})
public class FloorEntity extends LocationEntity {
...
@OneToMany(mappedBy = "floor")
private List<RoomEntity> rooms = new ArrayList<RoomEntity>();
...
}
@Entity(name = "Room")
@Table(name = "ROOM", uniqueConstraints = {
@UniqueConstraint(name = "ROOM_UK", columnNames = { "CODE", "FLOOR_ID" })
})
public class RoomEntity extends LocationEntity {
...
@ManyToOne
@JoinColumn(name = "FLOOR_ID", nullable = false, referencedColumnName = "ID")
private FloorEntity floor;
...
}
requested entity :
@Entity(name = "Lamp")
@Table(name = "LAMP")
public class LampEntity {
@ManyToOne
@JoinColumn(name = "LOCATION_ID", referencedColumnName = "ID")
private LocationEntity location;
}
repository :
public interface LampRepository extends JpaRepository<LampEntity, Long> {
@Query("SELECT lamp FROM Lamp lamp WHERE lamp.location.code = :locationCode AND TYPE(lamp.location) = Room")
public List<LampEntity> findAllByRoomCode(@Param("code") String locationCode);
...
}
I'm using spring-data-JPA 1.4.1.RELEASE with Hibernate 4.2.7.Final as provider.
My questions are :
- Is it possible to do that with Spring data JPA ?
- In a old stackoverflow post i saw that Hibernate accepted it only with
InheritanceType.SINGLE_TABLEbut maybe now it's ok in 4.2.7 ? - If not, what are my alternative if I want to keep my
InheritanceType.TABLE_PER_CLASSstrategy ?
Thanks a lot
Updated with unique constraints and relation between Floor and Room