gpt4 book ai didi

java - 使用实体类型表达式的 Spring 数据 JPA

转载 作者:行者123 更新时间:2023-11-30 11:16:55 32 4
gpt4 key购买 nike

我想在 spring 数据 JPA 存储库 @Query 中使用 JPA 2.0 类型表达式,但它给我一个验证错误 Validation failed for query for method public abstract java.util。列出 my.org.FooRepository.findAllByRoomCode()!

这是我的实体定义:

继承:

@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);
...
}

我正在使用 spring-data-JPA 1.4.1.RELEASEHibernate 4.2.7.Final 作为提供者。

我的问题是:

  1. 是否可以使用 Spring 数据 JPA 来做到这一点?
  2. 在一篇旧的 stackoverflow 帖子中,我看到 Hibernate 仅通过 InheritanceType.SINGLE_TABLE 接受它,但也许现在它在 4.2.7 中没问题?
  3. 如果不是,如果我想保留我的 InheritanceType.TABLE_PER_CLASS 策略,我有什么选择?

非常感谢


更新了 FloorRoom 之间的独特约束和关系

最佳答案

如果您使用 Spring JPA 存储库,则无需 @Query 即可通过将方法重命名为:

public List<LampEntity> findByLocation_Code(@Param("code") String locationCode);

只要确保所有的 setter 和 getter 都就位即可。

关于java - 使用实体类型表达式的 Spring 数据 JPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24626546/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com