gpt4 book ai didi

java - Spring JPA + CRUD - 自定义查询不允许 _ 字符?

转载 作者:行者123 更新时间:2023-12-01 09:35:09 27 4
gpt4 key购买 nike

我在 spring 中创建自定义查询时遇到了麻烦,因为我的实体的参数名称中包含“_”字符:“game_date”。

我的表还有一个名为“game_date”的列。

我创建了以下方法:

List<Games> findByGame_dateAndOpponent(@Param("game_date") Date game_date, @Param("opponent") String opponent);

但是当我启动我的应用程序时,它崩溃了,但有一种异常:“org.springframework.data.mapping.PropertyReferenceException:找不到游戏类型的属性游戏日期!”。在实体和查询方法中将参数名称更改为“gameDate”后,它停止提示,并且实际上返回预期的条目。但同时,它不会在搜索查询中返回“game_date”列中的值,该列是日期类型的简单常规列。我不知道这一切是怎么回事。

我使用的数据库是MySql。

这是代码本身:

实体:

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "games")
public class Games {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_game")
private int id;

@Column(name = "game_date", columnDefinition = "DATE")
@Temporal(TemporalType.DATE)
private Date gameDate;

public Date getGame_date() {
return gameDate;
}

public void setGame_date(Date _game_date) {
this.gameDate = _game_date;
}
}

和存储库:

import java.sql.Date;
import java.util.List;

import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

@RepositoryRestResource
public interface GamesRepository extends CrudRepository< Games , Integer > {

List< Games > findById( @Param( "id" ) int id );
List< Games > findAll( );
List<Games> findByGameDateAndOpponent(@Param("game_date") Date game_date, @Param("opponent") String opponent);

}

最佳答案

下划线是 Spring Data JPA 中的 reserved keyword。将其从您的属性及其 getter 和 setter 中删除就足够了,Hibernate 将完成剩下的工作:

@Entity
@Table(name = "games")
public class Games {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id_game")
private int id;

//Getter and setters for id

@Column(name = "game_date")
private Date gameDate;

public Date getGameDate() {
return gameDate;
}

public void setGameDate(Date gameDate) {
this.gameDate = gameDate;
}
}

此外,一般情况下,尝试使用 java naming convention 作为变量和字段名称,即大小写混合。

另请参阅:

关于java - Spring JPA + CRUD - 自定义查询不允许 _ 字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39043296/

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