我有2个表,combo_comment
和combo
(它可能是论坛帖子或堆栈溢出中的问题),其中combo_id
是外键combo_comment
,我想基于combo_id
选择评论,而不使用任何类型的加入,我想基本上这样做
SELECT * FROM COMBO_COMMENT where COMBO_ID= 3;
我指的是COMBO_COMMENT.COMBO_ID
,而不是COMBO.COMBO_ID
,但是当我尝试用hibernate执行此操作时,它会返回注释中的组合对象,我知道我可以使用@JsonIgnore
在返回答案时忽略组合对象,但后来我没有combo_id字段。我尝试过使用标准和HQL
这是我的combo_comment
实体类,没有getter和setter(它们没有任何类型的注释)
@Entity
@Table(name="COMBO_COMMENT")
public class ComboComment {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="COMMENT_ID",nullable = false)
private int commentId;
@ManyToOne(fetch = FetchType.EAGER,targetEntity = Combo.class,cascade = CascadeType.ALL)
@JoinColumn(name = "COMBO_ID",nullable = false,referencedColumnName="COMBO_ID")
private Combo combo;
@Column(name="COMBO_COMMENT",nullable = false)
private String ComboComment;
@Column(name="POST_DATE",nullable = false)
private long postDate;
public ComboComment(){
}
}
这是我尝试做的两种方式
标准:
Criteria criteria = createEntityCriteria();
criteria.add(Restrictions.eq("combo.comboId", comboId));
criteria.addOrder(Order.desc("postDate"));
criteria.setMaxResults(10);
if (page != 0) {
criteria.setFirstResult(page * 10);
}
使用HQL:
String hql = "from ComboComment where combo.comboId =:comboId";
Query query = getSession().createQuery(hql).setInteger("comboId", comboId);
这是我设法在没有任何异常情况下获得成功回复的唯一两种方式
更新
将FetchType
设置为LAZY
HTTP Status 500 - Could not write content: could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.mycompany.ufggservice.model.ComboComment["combo"]->com.mycompany.ufggservice.model.Combo_$$_jvst3d5_2["comboId"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: could not initialize proxy - no Session (through reference chain: java.util.ArrayList[0]->com.mycompany.ufggservice.model.ComboComment["combo"]->com.mycompany.ufggservice.model.Combo_$$_jvst3d5_2["comboId"])
答案 0 :(得分:0)
"但是当我尝试用hibernate执行此操作时,它会返回注释中的组合对象"
据我所知,您希望使用get of hibernate等方法来获取某个对象,但是您也在使用DB来查找关联的对象名称组合。
您收到此行为是因为您正在使用FetchType.EAGER,它表示要休眠以获取请求对象中的所有相关关联对象。
因此,如果您尝试获取评论,它还会为您提取与之关联的组合。
解决方案就是使用:
fetch = FetchType.LAZY
答案 1 :(得分:0)
我仍然没有在json mapper中得到我想要的回复,但最终我会弄清楚