我正在做一个练习游戏。
我有一个连接到MySQL数据库的spring boot / Maven项目。我能够设置一个仅从我的“ allriddles”表中检索所有内容的api。它曾经工作过,但现在api返回一个json,其中某些键的某些值为null。我唯一正在玩的是spring boot文件上的application.properties。我在spring.jpa.hibernate.ddl-auto的“更新”和“无”之间进行切换。我做错了什么?
application.properties
spring.jpa.hibernate.format_sql=true
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/riddlesgame
spring.datasource.username=root
spring.datasource.password=RiddlesGame886
spring.jpa.hibernate.ddl-auto=none
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
spring.data.rest.base-path=/api/v1
server.port=8088
这是数据库表和预期的列
这是返回的json,带有错误的null值
这是模特
@Entity
@Table(name = "allriddles")
public class Riddle {
/*
* ATTRIBUTES
*/
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
private String title;
private int difficulty;
private String prize;
private String riddlerName;
private int levels;
private String riddleDescription;
/*
* CONSTRUCTORS
*/
public Riddle() {}
public Riddle( String title, int difficulty, String prize, String riddlerName, int levels,
String description) {
super();
this.title = title;
this.difficulty = difficulty;
this.prize = prize;
this.riddlerName = riddlerName;
this.levels = levels;
this.riddleDescription = description;
}
}
这是我的呼叫服务的控制器
@RestController
public class GetRiddles {
@Autowired
RiddlesService rs;
@RequestMapping("/Riddles")
public List<Riddle> getAllRiddles(){
return rs.getAllRiddles();
}
所谓的服务
@Service
public class RiddlesService {
@Autowired
RiddlesRepository riddlesRepository;
public List<Riddle> getAllRiddles(){
List<Riddle> riddles = new ArrayList<>();
riddlesRepository.findAll()
.forEach(riddles::add);
return riddles;
}
原始界面
public interface RiddlesRepository extends CrudRepository<Riddle, Integer> {
}
最后是控制台输出,如果有帮助的话
我尝试了同样的事情,并得到了相似的结果。如您所说,它是在将spring.jpa.hibernate.ddl-auto修改为更新时发生的。最终添加了2个新列。
Hibernate: alter table allriddles add column riddle_description varchar(255)
Hibernate: alter table allriddles add column riddler_name varchar(255)
原始列名称为riddleDescription和riddlerName,其余保留为现有值。但是新列中将没有数据。因此,假设我重新创建了与您相同的问题,要么
riddlerName
和riddleDescription
以riddlername
和riddledescription
。我认为您可能在某些属性名称的所有小写字母和驼峰字母之间也有所更改。因为驼峰属性将作为下划线映射到数据库(例如,代码-riddleName-> db列-riddle_name),而所有小写字母都没有下划线(例如,代码-riddlername-> db列-riddlerName或riddlername)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句