hibernate没有插入到联接表中,因为id为null

ao218c7q  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(379)

我在用户和带有两个外键的trip实体之间有一个多对多关系。我正在尝试向用户添加一个trip,即使在我的users表中有这样一个id,我也会收到以下异常:

Caused by: org.postgresql.util.PSQLException: ERROR: insert or update on table "UserTrip" violates foreign key constraint "user_id"
  Detail: Key (user_id)=(1) is not present in table "User".

多对多关系的用户端:

@ManyToMany
@JoinTable(name = "\"UserTrip\"", schema = "\"TransportSystem\"", joinColumns = {
                @JoinColumn(name = "user_id") }, inverseJoinColumns = { @JoinColumn(name = "trip_id") })
private List<Trip> trips = new ArrayList<>();

多对多关系的绊脚石方面:

@ManyToMany(mappedBy = "trips")
private List<User> users = new ArrayList<>();

添加行程的dao函数:

public void addTrip(int id, Trip trip) {
        executeInsideTransaction(entityManager -> {
            User user = entityManager.find(User.class, id);
            user.getTrips().add(trip);
            });
}

处理同一dao内事务的小助手函数:

private void executeInsideTransaction(Consumer<EntityManager> action) {
        EntityTransaction tx = entityManager.getTransaction();
        try {
            tx.begin();
            action.accept(entityManager);
            tx.commit();
        } catch (RuntimeException e) {
            tx.rollback();
            throw e;
        }
}

这是我打电话来添加行程的地方(不要认为需要更多的上下文,如果你愿意,我可以提供更多。)

UserService userService = new UserService();
User user = userService.getById(1);
userService.addTrip(1, newTrip);

注意事项:
实体是“user”,但它Map到的表称为“users”,因为在postgresql中,user是保留关键字。
我尝试在用户端合并并删除级联和延迟获取类型
我试图将整个user对象传递给addtrip函数,然后使用entitymanager.merge(),但正如在stackoverflow上看到的那样,我决定使用entitymanager.find()直接从数据库中按id加载用户,然后添加角色并提交事务。不幸的是,这两种情况产生相同的结果(这个例外)。
不用说,数据库中有一个用户\u id=1。
我很感激你的意见。我知道有许多线程关于这个特殊的例外,但老实说,我似乎无法解决它。

wbgh16ku

wbgh16ku1#

这个问题已经解决了,任何人都想知道:这个问题来自于用户在postgresql中是一个保留关键字这一事实。为了避免出现问题,我尝试了多次,创建了一个users表,并将用户实体Map到users表。到目前为止还没有问题。
但是一旦涉及到一个联接表,事情就变得复杂了。在我的例子中,我有一个具有多对多关系的usertrip连接表,hibernate正在从user中寻找一个用户id。我发现没有办法明确地告诉hibernate使用用户而不是用户,这就是为什么我决定将我的表命名为userstrip,所有问题都得到了解决。
经验教训-尽可能避免使用与关键词相似的词。

相关问题