2013-10-06 52 views
0

我通过Spring REST/MVC创建了一个Angular客户端和一个REST后端。数据库是MySQL,我正在使用JPA和Hibernate进行ORM。JPA创建现有实体的修剪实体版本

我的一些前端视图要求我对Java端的某些域数据进行反规范化处理。 我有一个典型的用户域对象与id,fname,lname等。此用户对象指向数据库中的'用户'表。没什么特别的

的问题是,我有另一个对象“simplecost”具有以下结构

public class SimpleCost { 
private Long id; 
private Long userId; 
private Long cost; 
} 

上述对象的集合是由前端用来产生这样

userId cost 
1  5.5 
2  7.5 
3  10.00 

的图但是,这种观点应该是

Name    cost 
John Doe   5.5 
Jane Doe   7.5 
Rusty Shackleford 10.00 

因此,不是森只需使用SimpleCost对象的userId,我还需要发送fname和lname。

为了解决这个问题,我尝试了(失败的失败)以下方法。 我创建了一个名为“UserBare”的新域对象。这是“用户”的精简版本。我的意思是“UserBare”只有一个fname和lname。

我补充说:“UserBare”作为SimpleCost对象的一个​​新成员

新SimpleCost

public class SimpleCost { 
private Long id; 
private Long userId; 
private Long cost; 
private UserBare user; 
} 

提出的结构,但我无法填充使用JPA的用户对象。我尝试了OnetoOne连接,但无法正常工作。我也尝试将String fname,String lname字段添加到SimpleCost,然后使用@SecondaryTable注释以@Column填充这些值(table =“user”,name =“fName”)。这并没有工作。

这里是我的数据库结构

用户

CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`fName` varchar(100) DEFAULT NULL, 
`lName` varchar(100) DEFAULT NULL, 
`mName` varchar(100) DEFAULT NULL, 
`title` varchar(100) DEFAULT NULL, 
`email` varchar(100) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id_UNIQUE` (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 

simplecost

CREATE TABLE `simplecost` (
`id` bigint(20) NOT NULL AUTO_INCREMENT, 
`userId` bigint(20) DEFAULT NULL, 
`liableCost` decimal(10,2) DEFAULT NULL, 
`isActive` tinyint(1) DEFAULT NULL, 
PRIMARY KEY (`id`), 
UNIQUE KEY `id_UNIQUE` (`id`), 
KEY `fk_simplecost_user1_idx` (`userId`), 
CONSTRAINT `fk_simplecost_user` FOREIGN KEY (`userId`) REFERENCES `user`  (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1; 
/*!40101 SET character_set_client = @saved_cs_client */; 

回答

1

如果你想参加工作,你必须这样做:

public class SimpleCost { 
private Long id; 
private User user; 
private Long cost; 
} 

public class User{ 
    private Long id; 
    private String fName; 
    private String lName; 
    priavte String mName; 
    priavate String title; 
    private String email; 
} 

也如果我 你我会重命名列"id""userId""simpleCostId"