봄 데이터 JPA 리포지토리 @Query
에서 JPA 2.0 타입 표현식을 사용하고자하지만 유효성 검증 오류 Validation failed for query for method public abstract java.util.List my.org.FooRepository.findAllByRoomCode()!
을 제공합니다. 상속스프링 데이터 엔티티 타입 표현식을 사용한 JPA
: 여기
내 개체 정의입니다@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;
...
}
요청 엔티티 :
는@Entity(name = "Lamp")
@Table(name = "LAMP")
public class LampEntity {
@ManyToOne
@JoinColumn(name = "LOCATION_ID", referencedColumnName = "ID")
private LocationEntity location;
}
저장소 :
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);
...
}
나는을 사용하고 있습니다과 Hibernate 4.2.7.Final
을 제공합니다.
내 질문은 :
- 는 스프링 데이터 JPA로 그렇게 할 수 있습니까?
- 오래된 stackoverflow 게시물에서 나는 최대 절전 모드가 단지
InheritanceType.SINGLE_TABLE
으로 그것을 받아 들였지만 4.2.7에서는 괜찮은지 알았다. - 그렇지 않은 경우 내
InheritanceType.TABLE_PER_CLASS
전략을 계속 유지하려면 내 대안은 무엇입니까?
덕분에 많은
고유 제한 조건과 관련하여 업데이트 Floor
사이 Room
당신이 볼 수있는 완전한 스테이시 추적? 괜찮아요 –
을 게시하는 기회를, 나는 문제를 발견하고 한 봄 데이터 JPA 오류가 아닙니다;), 그것은 최대 절전 모드에 속합니다. 지금은 분석을 게시 할 수 없습니다 (평판이 10 개 미만). 몇 시간 후에 게시 해 드리겠습니다. – matiou