【问题标题】:empty foreign key column in database generated by hibernatehibernate生成的数据库中的空外键列
【发布时间】:2022-01-24 20:11:09
【问题描述】:

你好,我正在使用带有 JPA 注释的 Hibernate。 Client 和 Adresse 之间的关系是一对多的,因此 Hibernate 应该在 Adresse 表中创建新列(id_client)作为外键。 我的问题是我在添加的列中没有得到任何值,请问我该如何解决?

我的代码 XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.password">khaled</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate? 
useSSL=false&amp;serverTimezone=UTC</property>

    <property name="hibernate.connection.username">root</property>
    <property name="connection.password">khaled</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <property name="hbm2ddl.auto">create</property>
    <property name="show_sql">true</property>
    
    <property name="current_session_context_class">thread</property>
 <!--       <property name="hibernate.c3p0.min_size">1</property>
    <property name="hibernate.c3p0.max_size">100</property>
    <property name="hibernate.c3p0.timeout">0</property> -->
 </session-factory>
 </hibernate-configuration>

班级地址:

@Entity
@Table(name = "adresse")
public class Adresse {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_a")
private int id;
@Column(name = "rue_a")
private String rue;

@ManyToOne
@JoinColumn(name = "id_client")
private Client c;

// getter and setters here

类客户:

@Entity
@Table(name = "client")
public class Client {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id_c")
private int id;
@Column(name = "nom_c")
private String nom;

@OneToMany(cascade = CascadeType.ALL)
private  List<Adresse> adr = new ArrayList<Adresse>();

// getters and setters here 

我的主要方法:

// get SessionFactory
    SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
    // create session
    Session session = sessionFactory.openSession();
    System.out.println("Etat session " + session.isOpen());
    Transaction tx = null;
    try {
        // create client object
        Client monClient = new Client();
        monClient.setNom("rasori");

        // create adresses object
        Adresse adresseClient = new Adresse();
        adresseClient.setRue("pie IX");
        Adresse adresseClient2 = new Adresse();
        adresseClient2.setRue("sharbrook");
        monClient.getAdr().add(adresseClient);
        monClient.getAdr().add(adresseClient2);
        // start transaction
        tx = session.beginTransaction();
        // save client and adresses
        session.save(adresseClient);
        session.save(adresseClient2);
        session.save(monClient);

【问题讨论】:

    标签: java spring hibernate hql


    【解决方案1】:

    您在错误的实体中指定了@JoinColumn。尝试从 Client 类中删除 @JoinColumn 并将其添加到 Adresse 类中。见下文

    Client.java

    @OneToMany(cascade = CascadeType.ALL)
    private  List<Adresse> adr = new ArrayList<Adresse>();
    

    地址.java

    @ManyToOne
    @JoinColumn(name = "adresse_id")
    private Client c;
    

    【讨论】:

    • 是的,我已经尝试过了,但是在我的数据库中,我不会在地址表中的 id_client 中获得任何值
    • 您能否相应地更新问题
    • 已经更新
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 1970-01-01
    • 2017-03-08
    相关资源
    最近更新 更多