spring - 休眠中的 UUID 映射
问题描述
我已经将一个表映射到我的表并尝试在其中添加一些值。但我收到如下错误
引起:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:你的SQL语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“创建、删除、读取、角色 ID、更新、ID)值(_binary'Ã~N_WlAs—\niÊnÙ' 附近使用正确的语法
我的实体是
角色设置.java
@Entity @Table(name = "role_settings")
@Getter @Setter @Data
public class RoleSettings implements Serializable {
private static final long serialVersionUID = 8862104773442047690L;
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
private UUID id;
@ManyToOne
@JoinColumn(name = "role_id", referencedColumnName = "id", foreignKey = @ForeignKey(name = "role_settings_iam_role_FK"))
private RoleMaster roleId;
}
角色大师.java
@Entity @Table(name = "role")
@Getter @Setter @Data
public class RoleMaster implements Serializable {
private static final long serialVersionUID = 1792968151371176640L;
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
private UUID id;
@Column(name = "name", nullable = false, length = 255)
private String name;
}
RoleSettingsRepository.java
public interface RoleSettingsRepository extends JpaRepository<RoleSettings, UUID>{}
角色设置服务.java
@Service
Class RoleSettingsService {
@Autowired
private RoleSettingsRepository roleSettingsRepository;
public BaseDTO create(RoleSettings roleSettings) {
BaseDTO response = new BaseDTO();
RoleSettings newRoleSettings = new RoleSettings();
try {
newRoleSettings.setRoleId(roleSettings.getRoleId());
newRoleSettings.setAppAccessId(roleSettings.getAppAccessId());
newRoleSettings.setCreate(roleSettings.getCreate());
newRoleSettings.setUpdate(roleSettings.getUpdate());
newRoleSettings.setRead(roleSettings.getRead());
newRoleSettings.setDelete(roleSettings.getDelete());
roleSettingsRepository.save(newRoleSettings);
response.setStatusCode(200);
} catch (Exception e) {
}
return response;
}
}
角色设置控制器.java
@RestController
@RequestMapping("/v1/rolesettings")
public class RoleSettingsController {
@Autowired
private RoleSettingsService roleSettingsService;
@PostMapping("/post")
public BaseDTO create(@RequestBody RoleSettings roleSettings) {
BaseDTO response = roleSettingsService.create(roleSettings);
return response;
}
}
我的 json 对象
{ "roleId" :{"id": "b2e64c82-ab75-41d3-bb10-e9150f314807"} }
我的 roleId 以二进制(16)类型存储在数据库中。
解决方案
签入列的数据库数据类型id
。它必须是BINARY(16)
。并将您的实体字段注释为:
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator")
@Column(columnDefinition = "BINARY(16)")
private UUID id;
请注意,在这种情况下,您需要添加列定义。
推荐阅读
- javascript - React - 用输入值填充状态数组
- php - 如何在收藏laravel中添加数字?
- android - 如何将项目模块库暴露给 App 模块(Android Studio)
- google-cloud-functions - Google Cloud Functions 错误:“请求的资源上不存在‘Access-Control-Allow-Origin’标头”
- javascript - `iframe` 事件监听器如何检测 `escape` 键事件?
- sapui5 - sapui5 Internet Explorer 11 计划日历不起作用
- c++ - 对 vec2(x, y) 点的 std::vector 进行排序
- r - 将R中数据集中的每一行相互比较
- php - 如何在 WordPress 中为特定元素或功能执行 CSS 和 JS
- ios - 用于底部文本视图和顶部搜索栏的 IOS 键盘