gpt4 book ai didi

java - 数据库的自动更新会在错误的一侧创建单向连接

转载 作者:行者123 更新时间:2023-11-29 16:50:21 24 4
gpt4 key购买 nike

问题是,当我运行应用程序时,hibernate 在 tahograph_cards 表中创建了我不想要的列 user_id,并且它不会在我想要的 users 表中创建列 tahograph_card_id 。这是一个 OneToMany 关系。

这是我的文件:

应用程序属性:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/getmydrivercard
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto = update

用户:

package com.getmydrivercard.getmydrivercard.models;

import com.fasterxml.jackson.annotation.JsonIgnore;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.OnDelete;
import org.hibernate.annotations.OnDeleteAction;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

@Entity
@Table(name = "users")
public class User {
private static final String EMPTY_STRING = "";

@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID userId;

@NotEmpty
private String username;

@NotEmpty
private String password;

@NotEmpty
private String email;


@OneToMany(fetch = FetchType.LAZY, mappedBy = "user", cascade = CascadeType.ALL)
@OnDelete(action = OnDeleteAction.CASCADE)
@JsonIgnore
private Set<TahographCard> tahographCards;

private String comments;

protected User(){}

public User(String username, String password, String email){
setUsername(username);
setPassword(password);
setEmail(email);
setComments(EMPTY_STRING);
setTahographCards();
}

//getters and setters
}

行车记录仪卡:

package com.getmydrivercard.getmydrivercard.models;

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import javax.validation.constraints.NotEmpty;
import java.util.UUID;

@Entity
@Table(name = "tahograph_cards")
public class TahographCard {
@Id
@GeneratedValue(generator = "uuid2")
@GenericGenerator(name = "uuid2", strategy = "uuid2")
@Column(columnDefinition = "BINARY(16)")
private UUID tahographCardId;

@NotEmpty
private Boolean isActive;

@NotEmpty
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "userId")
private User user;

protected TahographCard(){}

public TahographCard(User user){
setUser(user);
setActive(true);
}
//getters and setters
}

我尝试使用mappedBy和我在互联网上找到的其他一些东西,但仍然不起作用。预先感谢您。

最佳答案

这里的问题不是实体配置而是数据库设计。您无法将 oneToMany 关系映射到一侧的 FK 列。

例如,如果您有 2 个用户和 4 个 TahographCard(每个用户 2 个),通常情况下它会如下所示:

User
id name
1 Foo
2 Bar

Table
id user_id (fk)
1 1
2 1
2 2
2 2

与 User 表上的 TahographCardId 相反是不可能的

关于java - 数据库的自动更新会在错误的一侧创建单向连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52849117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com