ttjkst 2015-10-02 11:01 采纳率: 0%
浏览 1459

hibernate 关于桥表问题自身不能进行save操作问题

首先我是名大学生,正在自学hibernate,在自己实践的项目出现一个问题。在对mang to mang关系中
(我用于实现用户中的朋友列表功能) 朋友的桥表不能进行 insert和delete之类的操作
也不能关联删除(在进行关联删除的时候,只是对进行update操作,没有进行delete操作)。
这是桥表friends的xml
图片说明

這是用户表Joiner的xml
图片说明图片说明
java代码:
public class Joiner {
private Long JId;
private String JGrander;
private String JUsername;
private String JPassword;
private Integer JAge;
private Long TheValueOfTrue;
private String JRealName;
private Set
TouchBasket;
private Set friends;
.。。。。。后面略
}

friends.class
public class Friends {
private Long FTableId;
private Joiner mine; //mysql---Jid
private Joiner friend; //mysql--right
private Integer admin;
后面略
}
session之类的东西用工厂类的方式进行维护了。
请问为什么会出现我之前出现的问题。。。
我该如何修改。。。
解释希望能够详尽一些。。。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-04 10:04
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在使用Hibernate时,桥表(Foreign Key)是一个重要的概念,它允许你在多个实体之间建立连接。但是,桥表也有一些限制,比如你提到的桥表不能插入或删除数据,只能更新。

    如果你想要插入或删除桥表的数据,你需要创建一个新的实体来表示这个桥表,并将这个新的实体映射到你的主实体上。这样,你可以通过调用getHibernateTemplate().insert()方法来插入新实体,或者通过调用getHibernateTemplate().delete()方法来删除旧实体。

    例如,如果你有一个名为Friendship的实体,其中包含一个Friend实体和一个Friendship实体,那么你可以创建一个新的实体Friendship来代表这两个实体之间的关系。然后,你可以像以下方式那样添加、删除或更新它们:

    public class Friendship extends BaseEntity {
        private Friend friend;
        private Friend mine;
    
        // getters and setters...
    }
    
    public class Friend extends BaseEntity {
        private Joiner mine;
        private Joiner friend;
    
        // getters and setters...
    }
    

    在这个例子中,我们创建了一个Friendship实体,它包含了两个子实体Friend。然后,我们可以像下面这种方式添加、删除或更新这些实体:

    // 添加好友
    Friendship friendship = new Friendship();
    friendship.setMine(new Friend());
    friendship.setFriend(new Friend());
    
    entityManager.persist(friendship);
    
    // 删除好友
    entityManager.remove(friendship);
    

    请注意,这种方法可能不是最优的解决方案,因为这可能会导致不必要的数据库操作。在大多数情况下,你应该避免直接访问桥表的字段,而是通过实体对象的方法来获取和设置这些字段。

    此外,如果你有大量桥表实体,那么这种方法可能会非常耗时。在这种情况下,你可以考虑使用@OneToMany注解来管理桥表实体,而不是直接处理桥表实体。这通常会更高效,因为Hibernate可以自动执行这些操作。

    评论

报告相同问题?