- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Spring Boot 和 MySQL 作为数据库编写简单的 Web 应用程序。代码如下
我有一个实体用户:
@Entity
@IdClass(UserKey.class)
public class User {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<Item> items;
private String fullName;
@Id
private String principalId;
@Id
@Enumerated(EnumType.STRING)
private LoginProvider loginProvider;
}
我还有一个 UserService:
@Service
public class UserService {
@Autowired
UserRepository userRepository;
public User getCurrentUser() {
try {
return (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
} catch (Exception e) {
return null;
}
}
@Transactional
public void addItemToUser(Item item) {
User currentUser = getCurrentUser();
if (!currentUser.getItems().contains(item)) {
currentUser.getItems().add(item);
userRepository.save(currentUser);
}
}
}
还有一个 Controller :
@Controller
public class UserController {
PostMapping(value = "/addItem/{id}")
@ResponseStatus(value = HttpStatus.OK)
public void addItemToUser(Map<String, Object> model, @PathVariable int id) {
userService.addItemToUser(itemService.getItem(id));
}
}
这是我的 Item 类:
@Entity
public class Item {
@Id
@GeneratedValue
private int id;
@Enumerated
private Category category;
public Item() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
Item item = (Item) o;
return id == item.id;
}
@Override
public int hashCode() {
return id;
}
}
这是我的存储库:
public interface UserRepository extends CrudRepository<User, Integer> {}
Controller 和一切工作正常,但有时当我尝试使用我的用户项目更新列表时会出现以下错误:
2018-04-03 17:09:53.814 ERROR 24265 --- [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; constraint [PRIMARY]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '23942983472937-FACEBOOK-2' for key 'PRIMARY'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_121]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_121]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_121]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_121]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.Util.getInstance(Util.java:408) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:935) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3973) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3909) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2527) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2680) ~[mysql-connector-java-5.1.42.jar:5.1.42]
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2490) ~[mysql-connector-java-5.1.42.jar:5.1.42]
如何消除这个错误?
最佳答案
如果您发布了您的Item
,将会有所帮助。类(class)。我的猜测是您需要实现 equals(Object obj)
& hashCode()
方法让您的Set<Item>
没有重复项。
关于mysql - 存储实体时出现 DataIntegrityViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632768/
我正在使用 Spring 3 来管理数据库事务。每当引发异常时,我都会捕获异常并返回相应的消息。但是当 Spring 提交事务时,异常再次引发并包含在 org.springframework.dao.
我正在使用 Spring Boot 和 MySQL 作为数据库编写简单的 Web 应用程序。代码如下 我有一个实体用户: @Entity @IdClass(UserKey.class) public
我正在编写一个 Spring 应用程序,似乎当我遇到数据库错误时,有时 Hibernate 的 ConstraintViolationException有时会抛出 Spring 的 DataInteg
我有这样的关系。有一个 Car 表和 CarGroup 表。汽车组表中存放着汽车。我想要的是:当一辆车被移除时,如果它在一个汽车组内,它也应该像往常一样从那里移除。我在我的项目中使用 Spring 和
我正在使用 Spring 制作 REST API,但在对其进行单元测试时遇到了麻烦。我编写了一个端点来更新用户组,当我在前端创建一个具有重复名称的组时(unique=true),它确实会发送 409
假设我有以下类(class): class Mapping { @Id long id; String uuid; String object; @ManyTo
我遇到了识别哪个约束触发 DataIntegrityViolationException 的问题。我有两个独特的限制条件:用户名和电子邮件,但我没有找到答案。 我试图找出根本原因异常,但我收到了这条消
目前,我有两个不同的异常被 DataIntegrityViolationException 类捕获: 重复的键。 数据截断:数据对于列来说太长。 我的问题: 我遗漏了哪些案例? 如何区分不同的 Dat
以前的 update() 方法抛出 具有相同标识符值的不同对象已经与 session 关联 所以我将 dao 更改为 merge .现在它给出 org.springframework.dao.Data
项目背景 项目整体采用的是springboot+mybatis 方式。有一次做数据查询的时候。console突然报:DataIntegrityViolationException: Error att
我有 2 个表,Person 和 Phone,它们具有一对一的关系。 **Person** person_id name **Phone** phone_id person_id -- foreign
我有一个带有 Hibernate 的 REST Spring 启动应用程序。为简单起见,我们假设此工作流程: Controller 处理传入请求,调用服务方法 服务方式为@Transactional
我正在使用 org.springframework.data.jpa.repository.JpaRepository 保存方法来保存实体。我认为 save 方法来自 CrudRepository 接
我需要在我的 Spring 3.0 应用程序中显示自定义消息。我有一个带 Hibernate 的数据库,但有几个限制。我对如何以良好的方式处理 DataIntegrityViolationExcept
我需要创建实体,如果它已经存在,还可以选择更新它。如果我捕获DataIntegrityViolationException并尝试在Catch中进行处理,则会收到错误org.hibernate.Asse
我需要创建实体,如果它已经存在,还可以选择更新它。如果我捕获DataIntegrityViolationException并尝试在Catch中进行处理,则会收到错误org.hibernate.Asse
我需要创建实体,如果它已经存在,还可以选择更新它。如果我捕获DataIntegrityViolationException并尝试在Catch中进行处理,则会收到错误org.hibernate.Asse
我正在编写单元测试来使用存储过程测试数据库中失败的更新。我有一个更新表之一的存储过程。根据测试,我在存储过程中发送了不正确的数据(即违反表中完整性约束的数据)。所以我期待 SQLException 但
我正在为 ManyToMany 之间的关系构建示例:User(1) - ()AccessLevel() - (1)Role 我已经在 Java 中使用 hibernate 实现了 3 个类,如下所
正在处理一个 api 调用,该调用会更改数据库中的一些数据。我正在尝试从 api 提供有意义的消息,以防 JPA 层出现异常。在任何 sql 查询运行失败时,我都会从 JPA 收到 DataInteg
我是一名优秀的程序员,十分优秀!