私のPostgreSQLデータベースに新しいレコードを作成しようとして問題があります。AutoIncrement Id PostgreSQLとSpringのブートデータJPA
:これらは私のJavaクラスです"exception": "org.springframework.dao.DataIntegrityViolationException",
"message": "could not execute statement; SQL [n/a]; constraint [id]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute statement
:私はこのエラーを抱えているが、(パスワード:ID、文字列::電子メール、文字列INT)私は、RESTサービスに新しいユーザーを投稿したいです
ドメイン
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String email;
private String password;
public User() {}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
コントローラ
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@RequestMapping(method = RequestMethod.GET)
public List<User> findAll() {
return userService.findAll();
}
@RequestMapping(method = RequestMethod.POST)
public User addUser(@RequestBody User user) {
userService.addUser(user);
return user;
}
}
サービス
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public List<User> findAll() {
return (List<User>) userRepository.findAll();
}
public User addUser(User user) {
userRepository.save(user);
return user;
}
}
リポジトリ
public interface UserRepository extends CrudRepository<User, Integer> {
// TODO
}
SQL
CREATE TABLE users(
id INT PRIMARY KEY NOT NULL,
email TEXT NOT NULL,
password CHAR(20) NOT NULL
);
してください、私はこの問題に取り組むために方法を知らないので、誰かが、私を助けて。
これはプロジェクトには当てはまらないかもしれませんが、データベースによって生成されたIDを使用することにパフォーマンスに影響があることに注意してください。 IDがデータベースによって生成されるとき、JPAは永続コンテキストにIDをロードするたびに追加のクエリを使用する必要があります。ステートメントの数を2倍にすることに加えて、バッチインサートの最適化もできません。 –
@KlausGroenbaekまあ、私はあまりデータベースとパフォーマンスについて知りません。ですから、私のデータベースの自動生成されたIDを置き換えるにはどうすればよいですか? – lbpeppers
トランザクションごとにたくさんの行を挿入しない限り、何もする必要はありません。そうした場合は、ここで '@ TableGenerator'を見てください。https://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/TableGenerator –