【发布时间】:2015-05-12 10:13:00
【问题描述】:
我正在开发一个购物应用程序,在我的应用程序中,我有表租户,在租户表中,我有列 Binary_id,它是数据库中二进制表中的主键。现在,当我向租户表发出获取请求时,我将所有租户表字段作为 JSON 获取。但是我有从二进制表到租户的@ManyToOne 关系,即租户可以有多个二进制记录。因此,在从 POSTMAN 客户端进行 GET 调用而不是获取租户详细信息时,我需要以 JSON 格式获取与该租户相关的所有二进制记录。
现在我在从 POSTMAN 客户端调用 http://localhost:8080/sportsmvc/rest/tenant 时得到如下 JSON
[
{
"id": 2,
"binaryId": "1002",
"name": "AltisArena"
},
{
"id": 9,
"binaryId": "1001",
"name": "Agon"
} ]
但我需要响应 JSON 如下:
[
{
"id": 2,
"name": "AltisArena",
"listOfBinary": [
{
"tenant_id": 2,
"location": "location1",
"description": "ABC"
},
{
"tenant_id": 2,
"location": "location2",
"description": "ABCD"
}
]
},
{
"id": 9,
"name": "Agon",
"listOfBinary": [
{
"tenant_id": 9,
"location": "location3",
"description": "desc1"
},
{
"tenant_id": 9,
"location": "location4",
"description": "desc2"
}
]
}
]
代码sn-ps:
租户实体:
@Entity
@Table(name="tenant", catalog="db_sports" )
// Define named queries here
@NamedQueries ( {
@NamedQuery ( name="TenantEntity.countAll", query="SELECT COUNT(x) FROM TenantEntity x" )
} )
public class TenantEntity implements Serializable {
private static final long serialVersionUID = 1L;
//----------------------------------------------------------------------
// ENTITY PRIMARY KEY ( BASED ON A SINGLE FIELD )
//----------------------------------------------------------------------
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id", nullable=false)
private Integer id ;
@Column(name="name", nullable=false, length=300)
private String name ;
//----------------------------------------------------------------------
// ENTITY LINKS ( RELATIONSHIP )
//----------------------------------------------------------------------
@ManyToOne
@JoinColumn(name="binary_id", referencedColumnName="id")
private SwaBinaryEntity swaBinary ;
SWA_Binary 实体:
@Entity
@Table(name="SWA_Binary", catalog="db_sports" )
// Define named queries here
@NamedQueries ( {
@NamedQuery ( name="SwaBinaryEntity.countAll", query="SELECT COUNT(x) FROM SwaBinaryEntity x" )
} )
public class SwaBinaryEntity implements Serializable {
private static final long serialVersionUID = 1L;
//----------------------------------------------------------------------
// ENTITY PRIMARY KEY ( BASED ON A SINGLE FIELD )
//----------------------------------------------------------------------
@Id
@Column(name="id", nullable=false, length=100)
private String id ;
@Column(name="file_location", nullable=false, length=400)
private String fileLocation ;
@Column(name="description", nullable=false, length=200)
private String description ;
TenantRestController:
@RequestMapping( value="/tenant",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public List<Tenant> findAll() {
return tenantService.findAll();
}
TenantServiceImpl:
@Override
public List<Tenant> findAll() {
List<TenantEntity> entities = tenantPersistence.loadAll();
List<Tenant> beans = new ArrayList<Tenant>();
for(TenantEntity entity : entities) {
beans.add(tenantServiceMapper.mapTenantEntityToTenant(entity));
}
return beans;
}
租户服务映射器:
public Tenant mapTenantEntityToTenant(TenantEntity tenantEntity) {
if(tenantEntity == null) {
return null;
}
//--- Generic mapping
Tenant tenant = map(tenantEntity, Tenant.class);
//--- Link mapping ( link to SwaBinary )
if(tenantEntity.getSwaBinary() != null) {
tenant.setBinaryId(tenantEntity.getSwaBinary().getId());
}
return tenant;
}
谁能帮忙解决这个问题。
提前致谢。
【问题讨论】:
-
为什么不向实体添加@ManyToOne 关系?
-
@Jens 感谢重播。抱歉忘记添加,我编辑了 TenantEntity 类。
-
尝试添加
@ManyToOne (cascade = CascadeType.ALL) -
@Jens 得到与以前相同的响应。
标签: json spring hibernate spring-mvc