通过一张中间表存储两个表之间的关联关系

@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
@JoinTable(name="user_card",joinColumns={@JoinColumn(name="id1")},inverseJoinColumns={@JoinColumn(name="id2")})

 

package com.lesson4;

import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;

import javassist.expr.NewArray;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="user")
public class User  implements Serializable{

    private String id;
    private String name;
    private Set<Card> card;
    

    @ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY)
    @JoinTable(name="user_card",joinColumns={@JoinColumn(name="id1")},inverseJoinColumns={@JoinColumn(name="id2")})
    public Set<Card> getCard() {
        return card;
    }
    public void setCard(Set<Card> card) {
        this.card = card;
    }
    @Id
    @GeneratedValue(generator="getUuid",strategy=GenerationType.AUTO)
    @GenericGenerator(name="getUuid",strategy="uuid")
    @Column(name="id",nullable=false,unique=true)
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    
    @Column(name="name",length=128)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
package com.lesson4;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

@Entity
public class Card {
    private int id;
    private String info;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    
    public String getInfo() {
        return info;
    }
    public void setInfo(String info) {
        this.info = info;
    }
}
package com.lesson4;

import java.util.HashSet;
import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class Service {
private SessionFactory sessionFactory;
    
    public Service() {
        this.sessionFactory = new AnnotationConfiguration().configure("com/lesson4/lesson4.cfg.xml").buildSessionFactory();
    }
    
    public void Insert(){
        Session session = sessionFactory.openSession();
        Transaction tx = session.beginTransaction();
        try {
            User user = new User();
            user.setId("123");
            user.setName("ccc");
            
            
            Set<Card> cards = new HashSet<Card>();
            
            for (int i = 0; i < 2; i++){
                Card card = new Card();
                card.setInfo("card");
                
                cards.add(card);
            }

            user.setCard(cards);

            session.save(user);

            
            
            tx.commit();
        } catch (Exception e) {
            // TODO: handle exception
            tx.rollback();
            e.printStackTrace();
        }finally{
            session.close();
        }
    }
}
<?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="dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="connection.url">jdbc:mysql://127.0.0.2:3306/test</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="format_sql">true</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <mapping class="com.lesson4.User"/>
        <mapping class="com.lesson4.Card"/>
    </session-factory>
</hibernate-configuration>