Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Spring应用程序从Hibernate 4.3.1.Final迁移到5.4.27.Final_Java_Spring_Hibernate_Jpa_Jpql - Fatal编程技术网

Java 将Spring应用程序从Hibernate 4.3.1.Final迁移到5.4.27.Final

Java 将Spring应用程序从Hibernate 4.3.1.Final迁移到5.4.27.Final,java,spring,hibernate,jpa,jpql,Java,Spring,Hibernate,Jpa,Jpql,我正在尝试在一个老式的Spring应用程序中从hibernate 4.3.1.Final迁移到5.4.27.Final(大多数Spring组件都在版本4.3.13.Final上)。在更新版本修复了一些小问题(类导入)并使用maven构建应用程序后,我在尝试将此web应用程序部署到Tomcat 7.0.107(堆栈跟踪的一部分指向根异常)上时出现以下错误: AlarmLogRepository: @Transactional(readOnly = true) public interfac

我正在尝试在一个老式的Spring应用程序中从hibernate 4.3.1.Final迁移到5.4.27.Final(大多数Spring组件都在版本4.3.13.Final上)。在更新版本修复了一些小问题(类导入)并使用maven构建应用程序后,我在尝试将此web应用程序部署到Tomcat 7.0.107(堆栈跟踪的一部分指向根异常)上时出现以下错误:

AlarmLogRepository:

  @Transactional(readOnly = true)
  public interface AlarmLogRepository extends JpaRepository<AlarmLog, Long>, JpaSpecificationExecutor<AlarmLog> {

    @Query("FROM AlarmLog " + //
        "WHERE zipato=:zipato " + //
        "  AND alarmId=:alarmId " + //
        "  AND subtype='ZONE' " + //
        "  AND subtypeUuid=:zone " + //
        "  AND timestamp BETWEEN :start AND :end" + //
        "  AND needAck=true " + //
        "  AND size(AlarmLog.acks)=0")
    List<AlarmLog> findAlarmLogsByZoneAndDatesAndNeedsAck(@Param("zipato") Zipato p_zipato,
                                                          @Param("alarmId") Integer p_alarmId,
                                                          @Param("zone") String p_zone,
                                                          @Param("start") Date p_start,
                                                          @Param("end") Date p_end);
@Transactional(readOnly=true)
公共接口AlarmLogRepository扩展了JpaRepository,JpaSpecificationExecutor{
@查询(“来自报警日志”+//
“其中zipato=:zipato”+//
“和alarmId=:alarmId”+//
“和子类型='ZONE'”+//
“和子UUID=:区域”+//
“和:开始和:结束之间的时间戳”+//
“AND needAck=true”+//
“和大小(AlarmLog.acks)=0”)
列出FindAlarmLogsByzone和Date以及NeedSack(@Param(“zipato”)zipato p_zipato,
@参数(“报警ID”)整数p_报警ID,
@参数(“区域”)字符串p_区域,
@参数(“开始”)p_开始日期,
@参数(“结束”)日期p_结束);
我曾尝试在谷歌上搜索此错误,但找不到未识别的
复数属性的确切组合。我还尝试调试到某个级别,发现此
集合
未被识别为集合类型,或者更准确地说,
确认集合
不在列表中,因此无法识别为
复数属性

我不知道如何解决这个问题


有什么想法吗?

对于该查询,您应该为实体
AlarmLog
设置标识符,并在where条件下以以下方式使用该标识符:

...
@Query("FROM AlarmLog al " +
        "WHERE zipato=:zipato " +
        "  AND alarmId=:alarmId " +
        "  AND subtype='ZONE' " +
        "  AND subtypeUuid=:zone " + 
        "  AND timestamp BETWEEN :start AND :end" +
        "  AND needAck=true " + 
        "  AND size(al.acks)=0")
...


是的,就是这样!太简单了…我错过了。:(谢谢!
@Entity
@Table(name = "z_alarm_log_ack")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class AlarmLogAck extends AbstractLongIdEntity {
  private static final int MESSAGE_MAX_LENGTH = 200;

  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "zipato_id")
  private Zipato           zipato;

  @ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "log_id")
  private AlarmLog         log;

  @ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "user_id")
  private User             user;

  @Column(name = "show_date", nullable = false, columnDefinition = "DATETIME")
  private Date             showDate;

  @Column(name = "ack_date", nullable = true, columnDefinition = "DATETIME")
  private Date             ackDate;

  @Column(name = "message", length = MESSAGE_MAX_LENGTH, nullable = true)
  private String           message;
  @Transactional(readOnly = true)
  public interface AlarmLogRepository extends JpaRepository<AlarmLog, Long>, JpaSpecificationExecutor<AlarmLog> {

    @Query("FROM AlarmLog " + //
        "WHERE zipato=:zipato " + //
        "  AND alarmId=:alarmId " + //
        "  AND subtype='ZONE' " + //
        "  AND subtypeUuid=:zone " + //
        "  AND timestamp BETWEEN :start AND :end" + //
        "  AND needAck=true " + //
        "  AND size(AlarmLog.acks)=0")
    List<AlarmLog> findAlarmLogsByZoneAndDatesAndNeedsAck(@Param("zipato") Zipato p_zipato,
                                                          @Param("alarmId") Integer p_alarmId,
                                                          @Param("zone") String p_zone,
                                                          @Param("start") Date p_start,
                                                          @Param("end") Date p_end);
...
@Query("FROM AlarmLog al " +
        "WHERE zipato=:zipato " +
        "  AND alarmId=:alarmId " +
        "  AND subtype='ZONE' " +
        "  AND subtypeUuid=:zone " + 
        "  AND timestamp BETWEEN :start AND :end" +
        "  AND needAck=true " + 
        "  AND size(al.acks)=0")
...