Я работаю над простым сервисом Spring Boot с Kotlin и PostgreSql.Я использую JPA.В настоящее время у меня есть две таблицы «пользователи» и «расходы», таблица «расходы» имеет ссылку на идентификатор «пользователи»:
CREATE TABLE users (
id BIGINT NOT NULL PRIMARY KEY,
username VARCHAR NOT NULL,
password VARCHAR NOT NULL
);
CREATE TABLE expenses (
id BIGINT NOT NULL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES users(id),
price DECIMAL NOT NULL,
title VARCHAR NOT NULL,
description VARCHAR
);
Объекты выглядят так:
@Entity
data class Users (
@Id @GeneratedValue( strategy = GenerationType.AUTO ) val id:
Long,
val username: String,
var password: String
) {
@OneToMany
val expenses: MutableSet<Expenses> = HashSet()
}
@Entity
data class Expenses(
@Id @GeneratedValue( strategy = GenerationType.AUTO ) val id:
Long? = null,
val user_id: Long,
val price: BigDecimal? = null,
val title: String? = null,
val description: String? = null
) {
@ManyToOne
lateinit var users: Users
constructor(user_id: Long, users: Users) : this(user_id = user_id) {
this.users = users
}
}
Iиспользуйте репозиторий JPA для подключения к базе данных и CrudRepository для вставки данных в базу данных:
interface ExpensesRepository : CrudRepository<Expenses, Long> {
}
Вот код, который я использую для вставки данных в базу данных:
@PostMapping("/expenses")
@ResponseBody
fun insertExpense(@RequestBody expenses: Expenses): Expenses {
expensesRepository.save(expenses);
return expenses;
}
И JSON, который я отправляю в«/ cost» с методом post:
{
"user_id:": 43,
"price": 10.99,
"title": "C++ course",
"description": "One time pay"
}
И служба выдает PSQLException:
org.postgresql.util.PSQLException: ERROR: insert or update on table "expenses" violates foreign key constraint "expenses_user_id_fkey"
Detail: Key (user_id)=(0) is not present in table "users".
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2477) ~[postgresql-42.1.4.jar:42.1.4]
...
В stackoverflow есть несколько ответов с той же ошибкой, стек технологий ошибок отличается.
Я использую Gradle.Версия Java: 1.8 Версия Kotlin: 1.2.51 Версия Spring Boot: 2.0.6.RELEASE Версия PostgreSql: 9.5.10 Версия драйвера PostgreSql: 42.1.4