【发布时间】:2018-05-26 12:49:47
【问题描述】:
我目前正在使用 GSON 将以下 JSON 转换为两个 java 对象。 Company 对象包含一个一对一关系的 Accounts 对象。
JSON:
{
"company_name": "ETHEREUM LTD",
"accounts": {
"next_made_up_to": "2018-11-30",
"next_due": "2019-08-31"
},
"company_number": "11090535"
}
公司对象:
@Data
@Entity
@Table(name = "companies")
public class Company {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne(cascade=CascadeType.ALL)
private Accounts accounts;
@NotNull
@SerializedName("company_number")
@Column(unique = true)
private String companyNumber;
@SerializedName("company_name")
private String companyName;
public Company() {}
public Company(String companyNumber) {
this.companyNumber = companyNumber;
}
}
账户对象:
@Data
@Entity
@Table(name = "accounts")
public class Accounts {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@SerializedName("next_due")
private Date nextDue;
@SerializedName("next_made_up_to")
private Date nextMadeUpTo;
}
我已经实现了一个 Spring Data JpaRepository 来将这些对象保存到我的数据库中。
public interface CompanyRepository extends JpaRepository<Company, Long> {
}
我有一种方法可以用新的 JSON 信息更新数据库中的所有 Company 对象。
@Scheduled(fixedRate = 50000)
public void updateAllCompanies() {
System.out.println("Starting update!");
for(Company company : companyRepository.findAll()) {
Long companyId = company.getId();
Long accountsId = null;
if(company.getAccounts() != null) {
accountsId = company.getAccounts().getId();
}
company = getCompany(company.getCompanyNumber());
company.setId(companyId);
if(accountsId != null) {
company.getAccounts().setId(accountsId);
}
companyRepository.save(company);
}
}
除非我手动设置父对象和子对象的 id,否则这些对象将创建为新的数据库条目,而不是更新现有条目。有没有比在 Java 中手动设置 id 更好的方法来处理这个问题?
【问题讨论】:
标签: java hibernate jpa spring-data gson