jpa复习日志--表之间的关联

本文详细介绍了JPA中的四种关联关系:多对一、一对多、一对一及多对多,并提供了相应的测试代码示例。在多对一关系中,多个用户属于同一组;一对多关系中,一个用户可以有多个权限;一对一关系可通过@OneToOne和@PrimaryKeyJoinColumn注解实现;多对多关系则需要使用@JoinTable进行双向关联,并且只有在操作关联属性时才会影响中间表。
摘要由CSDN通过智能技术生成

多对一(多个用户属于同一个组)

注:使用ManyToOne
那个多的表:

package com.bean;

import javax.persistence.*;
import java.io.Serializable;

@Entity
@Table(name = "t_groupuser")
public class GroupUser implements Serializable {
   
    @Id
    private int userid;
    private String username;
//    @Column(insertable=false,updatable=false)
//    private int group_id;

    //设置对象的关联的关系的时候,一定要用主键进行关联(重要)
    //如果关联的不一样的话,改变掉关联的,使用JoinColumn来改变
    //要移除进行关联的属性,不然会造成字段重复,
    //或者在地段上面添加@Column(insertable=false,updatable=false)
    @ManyToOne
    @JoinColumn(name = "group_id")
    private GroupBean bean;

    public GroupBean getBean() {
   
        return bean;
    }

    public void setBean(GroupBean bean) {
   
        this.bean = bean;
    }

    public int getUserid() {
   
        return userid;
    }

    public void setUserid(int userid) {
   
        this.userid = userid;
    }

    public String getUsername() {
   
        return username;
    }

    public void setUsername(String username) {
   
        this.username = username;
    }


}

那个一的表

package com.bean;

import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;

@Entity
@Table(name = "t_group")
public class GroupBean implements Serializable {
   
    @Id
    private int groupid;
    private String groupname;

    public int getGroupid() {
   
        return groupid;
    }

    public void setGroupid(int groupid) {
   
        this.groupid = groupid;
    }

    public String getGroupname() {
   
        return groupname;
    }

    public void setGroupname(String groupname) {
   
        this.groupname = groupname;
    }
}

测试代码

package com.multi;

import com.bean.GroupBean;
import com.bean.GroupUser;
import java.util.List;
import com.util.JpaUtil;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;

public class MultiOne {
   
    public static void main(String[] args) {
   
        //进行查询
        MultiOne.ManyToOne();
        //进行添加
        MultiOne.save();
        //进行删除
        MultiOne.remove();
    }

    private static void remove() {
   
        EntityManager entityManager = null;
        EntityTransaction tx = null;
        try {
   
            entityManager = JpaUtil.getManager();
            tx = entityManager.getTransaction();
            tx.begin();
            GroupUser groupUser=entityManager.find(GroupUser.class,1);
            entityManager.remove(groupUser);
            tx.commit();
        } catch (Exception e) {
   
            e.printStackTrace();
        } finally {
   
            try {
   
                JpaUtil.closeManager();
            } catch (Exception e) {
   
                e.printStackTrace();
            }
        }
        System.exit(0);
    }

    private static void save() {
   
        EntityManager entityManager = null;
        EntityTransaction tx = null;
        try {
   
            entityManager = JpaUtil.getManager();
            tx = entityManager.getTransaction();
            tx.begin();
            GroupBean groupBean=entityManager.find(GroupBean.class,1);
            GroupUser bean=new GroupUser();
            bean.setUsername("999999");
            bean.setBean(groupBean);
            entityManager.persist(bean);
            tx.commit();
        } catch (Exception e) {
   
            e.printStackTrace();
        } finally {
   
            try {
   
                JpaUtil.closeManager();
            } catch (Exception e) {
   
                e.printStackTrace
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值