Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.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
Jax-RS-javarestapi和hibernate_Java_Hibernate_Rest_Jax Rs - Fatal编程技术网

Jax-RS-javarestapi和hibernate

Jax-RS-javarestapi和hibernate,java,hibernate,rest,jax-rs,Java,Hibernate,Rest,Jax Rs,我正在尝试使用RESTAPI和hibernate来实现我的第一个JEE应用程序。我不知道如何用正确的方法做这件事。我的意思是我有实体用户 @Entity @XmlRootElement public class User { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String username; private String passwor

我正在尝试使用RESTAPI和hibernate来实现我的第一个JEE应用程序。我不知道如何用正确的方法做这件事。我的意思是我有实体用户

@Entity
@XmlRootElement
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;
    private String username;
    private String password;
    private String email;
    private LocalDateTime lastDateOfLogin;
    @OneToMany(fetch=FetchType.LAZY)
    private List<Post> posts = new ArrayList<>();
    @OneToMany(fetch=FetchType.LAZY)
    private List<Comment> comments = new ArrayList<>();
    @OneToMany(fetch=FetchType.LAZY)
    private List<Like> likes = new ArrayList<>();
    @OneToMany(fetch=FetchType.LAZY)
    private List<User> followers = new ArrayList<>();
    @OneToMany(fetch=FetchType.LAZY)
    private List<User> following = new ArrayList<>();
现在我的问题是,当我试图获得一个用户时,我得到的是异常org.hibernate.LazyInitializationException——我当然知道为什么,但问题是如何以正确的方式获得它。在这个@GET中,我不需要这个OneToMany集合,因为当我想要例如用户帖子时,我会调用user/1/posts url,我会收到所有用户帖子


如何开发此类应用程序?我是否应该从用户实体中删除关系,并在需要时搜索用户的数据库帖子?或者有其他解决方案吗?

如果特定端点只对用户的基本细节感兴趣,并且数据库模型与系统中其他对象之间没有关联,那么您需要以某种方式阻止序列化过程查看这些属性

如果您希望始终忽略该字段,可以使用@XmlTransient对其进行注释,但这是一个在构建时确定的决定,不能在运行时修改。对于需要动态影响序列化步骤的情况,您可以查看以下两篇文章:

或 另一种选择是修改您的服务,以返回该特定视图的类实例,该类实例仅包含要封送到输出XML中的属性。这可以通过JPA select new查询轻松完成,如:

SELECT new com.company.app.BasicUser(u.userName, other attributes) FROM User u
 WHERE u.id = :id 
现在,您的XML封送将基于BasicUser,而不是您的域实体用户,其中BasicUser没有您不希望为特定视图序列化的任何关联或属性

SELECT new com.company.app.BasicUser(u.userName, other attributes) FROM User u
 WHERE u.id = :id