Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/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
Java Hibernate在POST上调用INSERT,但当我得到_Java_Web Services_Hibernate - Fatal编程技术网

Java Hibernate在POST上调用INSERT,但当我得到

Java Hibernate在POST上调用INSERT,但当我得到,java,web-services,hibernate,Java,Web Services,Hibernate,我试图使用Hibernate存储两个对象,用户(具有ID、名称和ImageURL)和播放器(具有用户、点和FriendList) 出于某种原因,hibernate正确地存储了用户,并说它正在执行对播放器的插入,但当我试图检索我刚刚保存的播放器(或任何播放器)时,集合总是空的。用户正确返回。尝试了em.flush(),但没有帮助,尝试使用默认构造函数创建一个新的播放器,并对其执行em.persist,但得到了相同的结果 请帮忙。我真的不知道这里出了什么问题。这应该是相当基本的 这是我在玩家上发布的

我试图使用Hibernate存储两个对象,用户(具有ID、名称和ImageURL)和播放器(具有用户、点和FriendList)

出于某种原因,hibernate正确地存储了用户,并说它正在执行对播放器的插入,但当我试图检索我刚刚保存的播放器(或任何播放器)时,集合总是空的。用户正确返回。尝试了em.flush(),但没有帮助,尝试使用默认构造函数创建一个新的播放器,并对其执行em.persist,但得到了相同的结果

请帮忙。我真的不知道这里出了什么问题。这应该是相当基本的

这是我在玩家上发布的Web服务代码

@Path("/webService")
@RequestScoped
@Consumes({ "application/json" })
@Produces({ "application/json" })
public class MyWebService {

    @PersistenceContext(type = PersistenceContextType.EXTENDED)
    private EntityManager em;

    @POST
    @Path("/PlayerRequest/{id}/{name}/{imageURL}")
    @Consumes("application/json")
    public Player playerPOSTRequest(
            @PathParam("id") long id,
            @PathParam("name") String name,
            @PathParam("imageURL") String imageURL,
            ArrayList<String> JsonInput) {

        System.out.println("POST on a PlayerRequest for Player id: ["+ id + "]");

        User foundUser = null;
        foundUser = getUserByid(em, id);
        if(null == foundUser){
            User user = new User(id, name, imageURL);
            em.persist(user);
            foundUser = user;
        }

        Player foundPlayer = null;
        foundPlayer = getPlayerByid(em, id);

        if (null == foundPlayer) {
            Player player = new Player(foundUser);
            em.persist(player);
            em.flush(); //Try Flushing to see if that helps
            foundPlayer = player;
            Player newPlayer = new Player(); //See if default constructor is any different
            em.persist(newPlayer); //Try default constructor just to see
        } else {
            // RETURNING PLAYER
            System.out.println("Welcome back.  You are a current player.");
        }

        //Use JsonInput for stuff here

        System.out.println("Returning Player: " + foundPlayer);
        return foundPlayer;
    }// playerPOSTRequest

}//myWebService
当我运行此过程时,这里是我在控制台中获得的输出,请注意Hibernate正在生成的两个INSER-into-PLAYER语句(一个用于默认构造函数播放器),但在检索中,我能够获得用户,但没有现有的播放器:

 POST on a PlayerRequest for Player ID: [36985]
 Hibernate: 
     select
         user0_.id as id12_,
         user0_.myID as myID12_,
         user0_.ImageURL as ImageURL12_,
         user0_.Name as Name12_,
         user0_.version as version12_ 
     from
         USER user0_ 
     where
         user0_.myID=?
 New User for PlayerInfo for Player request.  Adding User to the system.
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         USER
         (myID, ImageURL, Name, version, id) 
     values
         (?, ?, ?, ?, ?)
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID=?
 New Player request.  Adding Player to the system.
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         PLAYER
         (FriendList, Points, version, id) 
     values
         (?, ?, ?, ?)
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         PLAYER
         (FriendList, Points, version, id) 
     values
         (?, ?, ?, ?)
 Returning Player: Player [PlayerInfo_ID=36985, PlayerInfo_Name=Joe Smith Points=100]

 GET on specific Player for User ID: [36985]
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID=?
 Returning Player: null

 GET on All Players
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID>?
 Returning List: []

 GET on specific User for User ID: [36985]
 Hibernate: 
     select
         user0_.id as id12_,
         user0_.myID as myID12_,
         user0_.ImageURL as ImageURL12_,
         user0_.Name as Name12_,
         user0_.version as version12_ 
     from
         USER user0_ 
     where
         user0_.myID=?
 Returning User: User [ID=36985, Name=Bob Smith ImageURL=www.myImage.com]

问题似乎出在播放器的映射注释中

@OneToOne
@JoinColumn(name="id")

指定给JoinColumn的名称与指定给id(PK)的名称相同。因此,Hibernate生成了错误的sql查询,在两个表之间进行了不正确的连接。

Wow。谢谢,从用户处更改了name=“myID”,现在可以使用了。非常感谢!非常好!如果投票对你有用的话,那就投票吧!;)
 POST on a PlayerRequest for Player ID: [36985]
 Hibernate: 
     select
         user0_.id as id12_,
         user0_.myID as myID12_,
         user0_.ImageURL as ImageURL12_,
         user0_.Name as Name12_,
         user0_.version as version12_ 
     from
         USER user0_ 
     where
         user0_.myID=?
 New User for PlayerInfo for Player request.  Adding User to the system.
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         USER
         (myID, ImageURL, Name, version, id) 
     values
         (?, ?, ?, ?, ?)
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID=?
 New Player request.  Adding Player to the system.
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         PLAYER
         (FriendList, Points, version, id) 
     values
         (?, ?, ?, ?)
 Hibernate: 
     call next value for hibernate_sequence
 Hibernate: 
     insert 
     into
         PLAYER
         (FriendList, Points, version, id) 
     values
         (?, ?, ?, ?)
 Returning Player: Player [PlayerInfo_ID=36985, PlayerInfo_Name=Joe Smith Points=100]

 GET on specific Player for User ID: [36985]
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID=?
 Returning Player: null

 GET on All Players
 Hibernate: 
     select
         player0_.id as id13_,
         player0_.FriendList as FriendList13_,
         player0_.Points as Points13_,
         player0_.version as version13_ 
     from
         PLAYER player0_ cross 
     join
         USER user1_ 
     where
         player0_.id=user1_.id 
         and user1_.myID>?
 Returning List: []

 GET on specific User for User ID: [36985]
 Hibernate: 
     select
         user0_.id as id12_,
         user0_.myID as myID12_,
         user0_.ImageURL as ImageURL12_,
         user0_.Name as Name12_,
         user0_.version as version12_ 
     from
         USER user0_ 
     where
         user0_.myID=?
 Returning User: User [ID=36985, Name=Bob Smith ImageURL=www.myImage.com]
@OneToOne
@JoinColumn(name="id")