当前位置: 首页 > 知识库问答 >
问题:

ClassCastException:在尝试迭代实体ID时,Integer不能强制转换为Long

华凡
2023-03-14

我在服务中有以下方法:

public Set<BoardCard> moveHoldedCardsToNewBoard(Board newBoard, Board prevBoard) {
        Set<BoardCard> boardCards = new HashSet<>();
        if (prevBoard != null) {
            List<Long> holdedCardIds = getExcludedCardIds(prevBoard);
            for (Long item: holdedCardIds) {

            }
    }

当我想要循环HoldedCards列表时,我收到了:java.lang.ClassCastException:java.lang.Integer不能在这个地方强制转换为java.lang.Long->用于(长项目:HoldedCards){

@Override
public List<Long> getExcludedCardIds(Board board) {

        return boardCardRepository.getExcludedCardIds(board.getId());
    }
@Repository
public interface BoardCardRepository extends JpaRepository<BoardCard, Long>, QueryDslPredicateExecutor<BoardCard> {

    @Query(value = "SELECT bc.card_id FROM boards_cards bc WHERE bc.board_id =:boardId AND bc.on_hold=true", nativeQuery = true)
    List<Long> getExcludedCardIds(@Param("boardId") Long boardId);
}
@Entity
@NamedEntityGraph(name = "graph.BoardCard", attributeNodes = {})
@Table(name = "boards_cards")
public class BoardCard implements Serializable {

    private static final long serialVersionUID = -9019060375256960701L;

    @EmbeddedId
    private BoardCardId id = new BoardCardId();

}
@Embeddable
public class BoardCardId implements Serializable {

    private static final long serialVersionUID = -3630484760647866357L;

    @ManyToOne
    private Board board;

    @ManyToOne
    private Card card;
}

    @Entity
    @Table(name = "boards")
    public class Board extends BaseEntity implements Serializable {
        @Id
        @SequenceGenerator(name = "boards_id_seq", sequenceName = "boards_id_seq", allocationSize = 1)
        @GeneratedValue(strategy = GenerationType.AUTO, generator = "boards_id_seq")
        private Long id;
}




 @Entity    
   @Table(name = "cards")     
   public class Card extends BaseEntity implements Serializable {

                @Id
                @SequenceGenerator(name = "cards_id_seq", sequenceName = "cards_id_seq", allocationSize = 1)
                @GeneratedValue(strategy = GenerationType.AUTO, generator = "cards_id_seq")
                private Long id;
}
CREATE TABLE IF NOT EXISTS boards_cards(
                board_id INTEGER,
                card_id INTEGER,
                on_hold BOOLEAN DEFAULT FALSE,
                CONSTRAINT pk_user_card PRIMARY KEY (board_id, card_id),
                FOREIGN KEY(board_id) REFERENCES boards(id),
                FOREIGN KEY(card_id) REFERENCES cards(id)
            );

我在这里发现,postgresql中LONG类型等价物是bigint。但是,如果我尝试使用它,它会对我的应用程序的性能有什么影响呢?

那么,告诉我如何解决这个问题?

共有1个答案

和斌
2023-03-14

我在这里找到了解决办法。解决方法是使用JPQL查询代替SQL查询。

重构存储库:

@Repository
public interface BoardCardRepository extends JpaRepository<BoardCard, Long>, QueryDslPredicateExecutor<BoardCard> {

    @Query(value = "SELECT id.card.id FROM BoardCard WHERE id.board.id = :boardId AND onHold = true")
    List<Long> getExcludedCardIds(@Param("boardId") Long boardId);
}
 类似资料:
  • 问题内容: 连接到MySQL时,出现错误(见下文)。 点击此处获取代码 我得到以下输出: 我该如何解决? 问题答案: 您的错误明确指出无法进行强制转换,因为java.math.BigInteger类实例不是java.lang.Long类的实例。 现在出现了一个问题,即谁在哪个级别上进行强制转换,当我们要求JDBC驱动程序进行连接时,它实际上在幕后进行了大量工作,然后才真正给我们适当的连接工作对象。

  • 问题内容: 我在一个新项目中将Swift样板代码用于Core Data。我的文件有一个定义的单一实体()和一个属性()。 我有一个看起来像这样的文件: 当我运行它时,它起作用: 我什至可以进入iOS模拟器正在使用的SQLite数据库,并确认已添加该行。 但是,当我运行与上面完全相同的代码,但使用而不是时,出现了与…行关联的错误消息,导致崩溃。如果我继续执行,则每次执行线程1时它都会到达并位于线程1

  • 错误日志如下: 我正在使用我的应用程序中的方法:

  • 问题内容: 我有2个不同的Java项目,其中一个有2个类:。 在另一个项目中,我动态加载这两个类并将它们存储在 Object 然后,我继续使用创建一个对象并将其存储在该对象上,然后我还将创建一个对象并将其添加到会话中。 在Form项目的生命周期中,我调用从会话中加载先前创建的bean对象(我​​正在运行)。当我尝试将此对象投射回A时,它失败,并显示。 当我使用以下方法将对象拉出会话时 并使用 检查

  • 问题内容: 我使用maven-eclipse创建了一个新的Spring MVC项目,并引发以下错误: (我尝试了stackoverflow的一些解决方案,但这些解决方案在我的情况下不起作用。pom.xml出现了一些我找不到的问题。我为servlet- api添加了提供的作用域,并尝试了它也不起作用。) 我的pom.xml如下: 我的web.xml如下: 问题答案: 更改 至 具有以下说明: 这很像