- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个用户,该用户有费用。在费用表中,我想要费用 ID、费用的用户和费用金额。在用户表中,我需要用户 ID、他的用户名、他的当前余额以及他所支付的所有费用的列表。
我想加入这 2 个,但我不知道如何正确引用用户,因此用户表单 Expense 类始终为 null。
首先,我发送创建用户的 post 请求:
{
"username":"abcd",
"balance":"100"
}
然后我想创建一个费用,但在这里我不确定如何正确发送一个用户:
{
"username":"abcd",
"id":"1",
"balance":"100",
"amount":"20"
}
这行不通,然后我这样试了:
{
"User":{
"username":"abcd",
"id":"1",
"balance":"100"
},
"amount":"20"
}
那也没用。
这是用户类:
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotBlank(message = "Username is mandatory")
private String username;
private Double balance = 0.0;
@OneToMany(mappedBy = "user")
private List<Expense> expenses;
...
我从这里删除了 getter 和 setter。
这是费用类:
@Entity
@Table(name = "Expenses")
public class Expense {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
private Double amount;
...
为了省钱我用.save()
来自 JpaRepository<Expense, Long>
为了检索所有内容,我使用 .findAll()
.
结果总是一样的:付出所有的代价得到返回
{
"id": 1,
"user": null,
"amount": 20
}
并为所有用户获取
{
"id": 1,
"username": "abcd",
"balance": 100,
"expenses": []
}
现在我不确定是我以错误的方式发送请求还是以错误的方式加入表格,或者两者兼而有之。
编辑:这里是 ExpenseController
:
@RestController
public class ExpenseController {
@Autowired
IExpenseService expenseService;
@GetMapping("/expenses")
public List<Expense> findExpenses() {
return expenseService.findAll();
}
@PostMapping("/expenses")
public void createNewExpense(@RequestBody Expense expense) {
expenseService.createNewExpense(expense);
}
}
createNewUser(...)
来自 ExpenseService
@Override
public void createNewExpense(Expense expense) {
repository.save(expense);
}
和ExpenseRepository
:
@Repository
public interface ExpenseRepository extends JpaRepository<Expense, Long> {
}
UserController
:
@RestController
public class UserController {
@Autowired
IUserService userService;
@GetMapping("/users")
public List<User> findUsers() {
return userService.findAll();
}
@GetMapping("/users/{id}")
public User findUserById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping("/users")
public ResponseEntity<Object> createUser(@RequestBody User user) {
if (userService.checkIfUsernameIsTaken(user)) {
Map<String, Object> response = new HashMap<>();
response.put("status", HttpStatus.NOT_ACCEPTABLE);
response.put("errors", "Username is already taken");
response.put("timestamp", new Date());
return new ResponseEntity<>(response, HttpStatus.BAD_REQUEST);
} else {
userService.createNewUser(user);
User currentUser = userService.findById(userService.findByUsername(user.getUsername()));
Map<String, Object> response = new HashMap<>();
response.put("id", currentUser.getId());
response.put("username", currentUser.getUsername());
response.put("balance", currentUser.getBalance());
response.put("expenses", currentUser.getExpenses());
return new ResponseEntity<>(response, HttpStatus.OK);
}
}
@DeleteMapping("/users/{id}")
public void deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
}
@PutMapping("/users/{id}/{balance}")
public void updateBalance(@PathVariable Long id, @PathVariable Double balance) {
userService.updateBalance(id, balance);
}
}
User 模型的其余部分与 Expense 模型相同。
最佳答案
尝试用这个有效负载发送post请求('user'字段以小写字母开头),我认为用户对象中的'id'字段应该足够了
{
"user":{
"username":"abcd",
"id":"1",
"balance":"100"
},
"amount":"20"
}
编辑:您还需要将 @JsonIgnoreProperties("expenses") 添加到您的 Expense 实体中以防止 jackson 递归读取 json
@Entity
@Table(name = "Expenses")
public class Expense {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@JsonIgnoreProperties("expenses")
@ManyToOne
@JoinColumn(name = "user_id")
private User user;
private Double amount;
.....
关于java - 如何在 Spring Boot 中正确连接表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56378764/
我有一台 MySQL 服务器和一台 PostgreSQL 服务器。 需要从多个表中复制或重新插入一组数据 MySQL 流式传输/同步到 PostgreSQL 表。 这种复制可以基于时间(Sync)或事
如果两个表的 id 彼此相等,我尝试从一个表中获取数据。这是我使用的代码: SELECT id_to , email_to , name_to , status_to
我有一个 Excel 工作表。顶行对应于列名称,而连续的行每行代表一个条目。 如何将此 Excel 工作表转换为 SQL 表? 我使用的是 SQL Server 2005。 最佳答案 这取决于您使用哪
我想合并两个 Django 模型并创建一个模型。让我们假设我有第一个表表 A,其中包含一些列和数据。 Table A -------------- col1 col2 col3 col
我有两个表:table1,table2,如下所示 table1: id name 1 tamil 2 english 3 maths 4 science table2: p
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 1 年前。 Improve th
下面两个语句有什么区别? newTable = orginalTable 或 newTable.data(originalTable) 我怀疑 .data() 方法具有性能优势,因为它在标准 AX 中
我有一个表,我没有在其中显式定义主键,它并不是真正需要的功能......但是一位同事建议我添加一个列作为唯一主键以随着数据库的增长提高性能...... 谁能解释一下这是如何提高性能的? 没有使用索引(
如何将表“产品”中的产品记录与其不同表“图像”中的图像相关联? 我正在对产品 ID 使用自动增量。 我觉得不可能进行关联,因为产品 ID 是自动递增的,因此在插入期间不可用! 如何插入新产品,获取产品
我有一个 sql 表,其中包含关键字和出现次数,如下所示(尽管出现次数并不重要): ____________ dog | 3 | ____________ rat | 7 | ____
是否可以使用目标表中的LAST_INSERT_ID更新源表? INSERT INTO `target` SELECT `a`, `b` FROM `source` 目标表有一个自动增量键id,我想将其
我正在重建一个搜索查询,因为它在“我看到的”中变得多余,我想知道什么 (albums_artists, artists) ( ) does in join? is it for boosting pe
以下是我使用 mysqldump 备份数据库的开关: /usr/bin/mysqldump -u **** --password=**** --single-transaction --databas
我试图获取 MySQL 表中的所有行并将它们放入 HTML 表中: Exam ID Status Assigned Examiner
如何查询名为 photos 的表中的所有记录,并知道当前用户使用单个查询将哪些结果照片添加为书签? 这是我的表格: -- -- Table structure for table `photos` -
我的网站都在 InnoDB 表上运行,目前为止运行良好。现在我想知道在我的网站上实时发生了什么,所以我将每个页面浏览量(页面、引荐来源网址、IP、主机名等)存储在 InnoDB 表中。每秒大约有 10
我在想我会为 mysql 准备两个表。一个用于存储登录信息,另一个用于存储送货地址。这是传统方式还是所有内容都存储在一张表中? 对于两个表...有没有办法自动将表 A 的列复制到表 B,以便我可以引用
我不是程序员,我从这个表格中阅读了很多关于如何解决我的问题的内容,但我的搜索效果不好 我有两张 table 表 1:成员 id*| name | surname -------------------
我知道如何在 ASP.NET 中显示真实表,例如 public ActionResult Index() { var s = db.StaffInfoDBSet.ToList(); r
我正在尝试运行以下查询: "insert into visits set source = 'http://google.com' and country = 'en' and ref = '1234
我是一名优秀的程序员,十分优秀!