Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate:获取集合_Hibernate - Fatal编程技术网

Hibernate:获取集合

Hibernate:获取集合,hibernate,Hibernate,我在尝试获取元素集合时遇到了一个问题:Friend集合为空 共有3类: @Entity @Table(name="USER") public class User { @Id @Column(name="USER_ID", nullable=false) private String mail; @Column(name="PASSWORD") private String password; @Column(name="SURNAME") private String surname;

我在尝试获取元素集合时遇到了一个问题:Friend集合为空

共有3类:

@Entity
@Table(name="USER")
public class User {
@Id
@Column(name="USER_ID", nullable=false) 
private String mail;

@Column(name="PASSWORD")
private String password;

@Column(name="SURNAME")
private String surname;

@Column(name="NAME")
private String name = null;

@Column(name="STATUT")
private StatutUser statut;

@Column(name="PHONENUMBER")
private int phoneNumber;

@OneToMany(cascade = CascadeType.PERSIST, mappedBy="friendPK.friend")
@Fetch(FetchMode.JOIN)
    private Set<Friend> friends = new HashSet<Friend>();

    ... 
    Some getters and setters
最后一点:

@SuppressWarnings("serial")
@Embeddable 
public class FriendPK implements Serializable{

    @ManyToOne
    @JoinColumn(name="USER1_ID", referencedColumnName="USER_ID")
    protected User user1;

    @ManyToOne
    @JoinColumn(name="USER2_ID", referencedColumnName="USER_ID")
    protected User friend;
}
当我尝试获取所有好友的用户时,集合为空

以下是添加关系的方法的文件:

private EntityManagerFactory emf;
private EntityManager manager;

public String addFriends(String mail1, String mail2){

        EntityTransaction t;
        t = manager.getTransaction();

        try{
            t.begin();

            User user = manager.find(User.class, mail1);

            User friend =  manager.find(User.class, mail2);

            Friend f = new Friend();
            f.setStatutFriend(StatutFriend.TOCHECK);
            FriendPK friendPK = new FriendPK();
            friendPK.setFriend(friend);
            friendPK.setUser1(user);
            f.setFriendPK(friendPK);

            Set<Friend> relationship = new HashSet<Friend>();
            relationship =  user.getFriends();
            relationship.add(f);

            Set<Friend> relationship2 = new HashSet<Friend>();
            relationship2 = friend.getFriends();
            relationship2.add(f);

            user.setFriends(relationship);
            friend.setFriends(relationship2);

            manager.persist(user);

            t.commit();
            error.setReq(StatutReq.DONE);
        }
        catch(Exception e){
            error.setReq(StatutReq.ABORTED);
            error.setError(e.getMessage());
        }
        finally
        {
            if (t.isActive())
            {
                t.rollback();
            }
        }
私有实体管理器工厂emf;
私人实体经理;
公共字符串addFriends(字符串mail1、字符串mail2){
实体交易t;
t=manager.getTransaction();
试一试{
t、 begin();
User=manager.find(User.class,mail1);
User-friend=manager.find(User.class,mail2);
Friend f=新朋友();
f、 设置StatutFriend(StatutFriend.TOCHECK);
FriendPK FriendPK=新的FriendPK();
friendPK.setFriend(friend);
friendPK.setUser1(用户);
f、 setFriendPK(friendPK);
Set relationship=newhashset();
relationship=user.getFriends();
关系。添加(f);
Set relationship2=新的HashSet();
relationship2=friend.getFriends();
关系2.添加(f);
user.setFriends(关系);
friend.setFriends(关系2);
manager.persist(用户);
t、 提交();
setReq错误(statureq.DONE);
}
捕获(例外e){
setReq错误(statureq.中止);
error.setError(例如getMessage());
}
最后
{
if(t.isActive())
{
t、 回滚();
}
}
请原谅我的代码…我是初学者!
非常感谢。

乍一看,尽管您的体系结构看起来很奇怪,但代码似乎是正确的。 friendFK代表什么? 用户不需要持有一组用户集吗? 从数据库的角度来看,关系表是必要的,但在java模型中不是

如果我是你,我会删除这个类并使用hbm2dll工具生成正确的匹配数据库模式


请指定您的Hibernate和jars版本,并将您的Hibernate配置文件提供给我们以进行检查。

谢谢您的回答。我在没有使用friendFK的情况下更改了全局结构。现在它可以工作了!
private EntityManagerFactory emf;
private EntityManager manager;

public String addFriends(String mail1, String mail2){

        EntityTransaction t;
        t = manager.getTransaction();

        try{
            t.begin();

            User user = manager.find(User.class, mail1);

            User friend =  manager.find(User.class, mail2);

            Friend f = new Friend();
            f.setStatutFriend(StatutFriend.TOCHECK);
            FriendPK friendPK = new FriendPK();
            friendPK.setFriend(friend);
            friendPK.setUser1(user);
            f.setFriendPK(friendPK);

            Set<Friend> relationship = new HashSet<Friend>();
            relationship =  user.getFriends();
            relationship.add(f);

            Set<Friend> relationship2 = new HashSet<Friend>();
            relationship2 = friend.getFriends();
            relationship2.add(f);

            user.setFriends(relationship);
            friend.setFriends(relationship2);

            manager.persist(user);

            t.commit();
            error.setReq(StatutReq.DONE);
        }
        catch(Exception e){
            error.setReq(StatutReq.ABORTED);
            error.setError(e.getMessage());
        }
        finally
        {
            if (t.isActive())
            {
                t.rollback();
            }
        }