我看到了几个类似的问题,但没有一个对我有效的答案。我正致力于将一个现有的项目转换为使用Hibernate。我正在使用Mysql作为数据库。我有一节课是这样的:
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@ManyToOne
@JoinColumn(name = "group_id_user")
private Group group;
@Column(name = "name")
private String name;
...
// getters and setters....
}
像这样的类:
@Entity
@Table(name = "group")
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_id")
private Long groupId;
@Column(name="group_name")
private String groupName;
...
// getters and setters....
}
当我从数据库中获取user
项时,我将其转换为JSON,最后得到如下格式的结果:
{
"user": {
"userId": 1,
"group": {
"groupId": 3,
"groupName": "Group Three",
},
"name": "John Doe",
}
}
{
"user": {
"userId": 1,
"groupId": 3,
"name": "John Doe",
}
}
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "group_id_user")
private Group group;
error: Errorjava.lang.UnsupportedOperationException: Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
我找到了这个消除错误的答案,但是JSON对象与我添加fetchtype.lazy
之前完全相同。在某种程度上,转换到JSON会添加fetchtype.lazy
忽略的值。
我使用转换到JSON的方法如下:
GsonBuilder b = new GsonBuilder();
Gson gson = b.create();
//b.registerTypeAdapterFactory(HibernateProxyTypeAdapter.FACTORY);
com.google.gson.JsonArray jsonArray = gson.toJsonTree(out).getAsJsonArray();
如果我错了,请纠正我,因为我是新冬眠的。根据我到目前为止的经验,是的,可以只发送对象ID,而不是发送整个对象细节作为响应。通过使用@JSONIdentityReference
和@JSONIdentityInfo
,在这里查找文档
下面是为我工作的示例代码:
小组班
@Entity
@Table(name = "group")
public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "group_id")
private Long groupId;
@Column(name="group_name")
private String groupName;
...
// getters and setters....
}
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Long userId;
@ManyToOne
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "group_id")
@JsonIdentityReference(alwaysAsId = true)
@JoinColumn(name = "group_id_user")
private Group group;
...
// getters and setters....
}
ObjectMapper mapper = new ObjectMapper();
try {
json = mapper.writeValue(user);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
我想获取用于登录自定义拦截器的HttpServletACK返回内容。开发环境是Spring Boot 1.5.6Java8 Embeded Tomcat 8.0.35,返回内容是RESTful接口json string。这是我获取超文本传输协议响应内容的代码: 当响应json较短时,代码运行良好。但当返回的json太长时,responseContent只包含部分响应内容,在登录之前解析内容失败(需
你的开发者必须力求在项目的公共论坛中以一个单独的参与者出现,而不是一个单独的公司。这不是因为作为一个公司出现本身固有的一些负面含义(好的,或许有一些,但那不是本书所讨论的)。而是因为开源项目的结构配备只能处理个人实体。一个单独的贡献者可以讨论、提交补丁、获取信誉、表决等等。而一个公司不能。 此外,因为分布式的行为方式,你避免了对于刺激性中央集权的敌对。让你的开发者在邮件列表中意见并不一致。鼓励他们
所以我在使用DerbyDB,并建立了一些实体。我有一个,它被用作某些实体的超类()。更具体地说,我有一个超类和3个子类,即、和。现在我有了一个不同的实体,比如说,它应该引用(作为其字段之一)它的所有者。所以我创建了一个名为的字段。我得到的错误是: 有变通办法吗?
问题内容: 我正在发出HTTP请求并侦听“数据”: 问题在于响应是分块的,因此“数据”只是发送回的一部分内容。 我如何将全身退回? 问题答案:
在JPA(Hibernate)中,当我们自动生成ID字段时,假设用户不知道这个密钥。因此,在获取实体时,用户将基于ID以外的某些字段进行查询。在这种情况下,我们如何获取实体(因为无法使用)。 我知道我们可以稍后使用查询并过滤结果。但是,有没有更直接的方法(因为这是我所理解的一个非常普遍的问题)。