JPA的配置

(1)单向一对多配置
多方配置:
@Entity@Table(name=“t_product”)
public class Product {
@Id
@GeneratedValue
private Long id;
private String name;
}
一方配置

						@Entity
						@Table(name="t_productDir")
						public class ProductDir {
						    @Id
						    @GeneratedValue
						    private Long id;
						    private  String name;
						    //泛型必须添加进去
						    @OneToMany
						    @JoinColumn(name="dir_id")
						    private Set<Product> products = new HashSet<>();
						 }

注: 集合申明的时候,使用接口
(2)双向一对多

配置:让多方来维护的关系,一方放弃管理mappedBy

    @OneToMany(mappedBy = "dir")
    private List<Product> products = new ArrayList<>();

双向一对多配置 级联保存 级联删除(配置) 孤儿删除

级联:就是我操作一方数据,就同时可以多方的数据也一并操作

级联分为:级联保存
@OneToMany(cascade = CascadeType.PRESIST)
级联删除
@OneToMany(cascade = CascadeType.REMOVE)
孤儿删除
让一方解除关系 ,才能从1方删除多方
@OneToMany(cascade = CascadeType.REMOVE,mappedBy = “dir”,orphanRemoval = true)

单向和双向 多对多

@Entity
@Table(name="t_user")
public class User {
    @Id
    @GeneratedValue
    private Long id;
    private String name;
    @ManyToMany
    @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
            inverseJoinColumns ={@JoinColumn(name="role_id")} )
    private Set<Role> roles = new HashSet<>();
}
@Entity
@Table(name="t_role")
public class Role {   
    @Id    @GeneratedValue    
    private Long id;    
    private String name;
}

单向对多对保存数据

保存代码


        User user1 = new User();
        user1.setName("渣渣辉");

        User user2 = new User();
        user2.setName("光头强");

        User user3 = new User();
        user3.setName("王天霸");
        Role role1 = new Role();
        role1.setName("演员");
        Role role2 = new Role();
        role2.setName("导演");

        //设置关系
        user1.getRoles().add(role1);
        user2.getRoles().add(role1);
        user3.getRoles().add(role1);
        user1.getRoles().add(role2);
        user2.getRoles().add(role2);

        //保存数据
        EntityManager entityManager = JpaUtils.getEntityManager();
        entityManager.getTransaction().begin();
        entityManager.persist(user1);
        entityManager.persist(user2);
        entityManager.persist(user3);
        entityManager.persist(role1);
        entityManager.persist(role2);

        entityManager.getTransaction().commit();

查询:如果要使用lazy加载 自己配置lazy就可以

双向多对多

配置

role

@ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
    @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="role_id")},
            inverseJoinColumns ={@JoinColumn(name="user_id")} )
    private Set<User> users = new HashSet<>();

user

 @ManyToMany(fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
    @JoinTable(name="t_user_role",joinColumns={@JoinColumn(name="user_id")},
            inverseJoinColumns ={@JoinColumn(name="role_id")} )
    private Set<Role> roles = new HashSet<>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值