Jax-RS-javarestapi和hibernate
我正在尝试使用RESTAPI和hibernate来实现我的第一个JEE应用程序。我不知道如何用正确的方法做这件事。我的意思是我有实体用户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
@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