【发布时间】:2020-11-19 17:52:17
【问题描述】:
您好,我有一个包含以下字段的 mysql 表。我无法通过在 springboot 中调用 api /roles 来获得正确的值。这是我的角色文件 -
Role.sql
CREATE TABLE IF NOT EXISTS `role` (
`role_id` int(5) NOT NULL AUTO_INCREMENT,
`role_description` varchar(25) NOT NULL,
PRIMARY KEY (`role_id`)
) ENGINE=MyISAM AUTO_INCREMENT=50 DEFAULT CHARSET=latin1;
INSERT INTO `role` (`role_id`, `role_description`) VALUES
(1, 'admin'),
(2, 'hairstylist'),
(3, 'staff');
RoleController.java
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/api")
public class RoleController {
@Autowired
private RoleRepository roleRepository;
@PostMapping("/roles")
public Role addRole(@RequestBody Role role) {
return roleRepository.save(role);
}
@GetMapping("/roles")
public ResponseEntity<List<Role>> getAllRoles() {
return ResponseEntity.ok(roleRepository.findAll());
}
}
RoleRepository.java
package com.example.hms.springboothms.repository;
import com.example.hms.springboothms.model.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface RoleRepository extends JpaRepository<Role, Integer> {
}
Role.java
package com.example.hms.springboothms.model;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import javax.persistence.*;
@NoArgsConstructor
@AllArgsConstructor
@Table
@Entity
public class Role {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int roleID;
private String roleDescription;
public int getRoleID() {
return roleID;
}
public void setRoleID(int roleID) {
this.roleID = roleID;
}
public String getRoleDescription() {
return roleDescription;
}
public void setRoleDescription(String roleDescription) {
this.roleDescription = roleDescription;
}
}
但是,当我使用邮递员调用角色 api 时,我在角色表中得到重复的管理字段 - 有人知道为什么吗?
我不确定是不是休眠映射?我尝试关注Spring Boot: Reading data using Spring Data JPA returns incorrect values 但它仍然没有得到正确的值
spring.main.web-application-type=none
spring.jpa.hibernate.ddl-auto=validate
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
这是我的 pom.xml 文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<distributionManagement>
<repository>
<id>internal.repo</id>
<name>Internal repo</name>
<url>file:///home/thara/testesb/in</url>
</repository>
</distributionManagement>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example.hms</groupId>
<artifactId>springboot-hms</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-hms</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-lambda-java-core</artifactId>
<version>1.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
【问题讨论】:
-
你有没有试过删除表格,将
spring.jpa.hibernate.ddl-auto设置为create或update,启动应用程序,它会自动生成表格,然后手动将内容填入表格中,然后尝试再次获取条目? -
这似乎没有问题,虽然我会尝试将
roleRepository.findAll()设置为变量,然后将变量设置为响应, -
@aman findAll() 方法只返回管理员角色,而不是表中的所有角色 - 管理员、发型师和员工......它一直给我那些 id 为 0 的角色
-
@Amir 我将 ddl-auto 设置为在我的 application.yml 文件中更新。我使用 mysql 脚本来运行我的查询,所以我总是会删除整个数据库并一直重新创建表
-
你的mysql版本是多少?您也可以发布您的完整数据库配置吗?
标签: mysql spring-boot postman