Java JPA创建现有实体的精简实体版本

Java JPA创建现有实体的精简实体版本,java,hibernate,angularjs,jpa,orm,Java,Hibernate,Angularjs,Jpa,Orm,通过SpringREST/MVC,我有一个Angular客户端和一个REST后端。数据库是MySQL,我使用JPA和Hibernate for ORM 我的一些前端视图要求我在Java端对一些域数据进行反规范化。 我有一个具有id、fname、lname等的典型用户域对象。。此用户对象指向数据库中的“用户”表。没什么不寻常的 问题是我有另一个对象“simplecost”,它具有以下结构 public class SimpleCost { private Long id; private Lo

通过SpringREST/MVC,我有一个Angular客户端和一个REST后端。数据库是MySQL,我使用JPA和Hibernate for ORM

我的一些前端视图要求我在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
因此,我需要发送fname和lname,而不是只发送带有SimpleCost对象的userId

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

我添加了“UserBare”作为SimpleCost对象的新成员

SimpleCost的新提议结构

public class SimpleCost {
 private Long id;
 private Long userId;
 private Long cost;
 private UserBare user;
}
但是我无法使用JPA填充用户对象。我试过一次,但没有成功。我还尝试将字符串fname、字符串lname字段添加到SimpleCost中,然后添加@SecondaryTable注释,用@Column(table=“user”,name=“fname”)填充这些值。这也不管用

这是我的数据库结构

public class SimpleCost {
 private Long id;
 private Long userId;
 private Long cost;
}
使用者

简单成本

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 */;

如果希望加入工作,则必须执行以下操作:

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”