我有 3 個模型類作為 UserBean 、 PolicyBean 和 RequestedPoliciesForUserBean。 userId是 userBean 類的主鍵。 policyNo是 PolicyBean 類的主鍵。 transactionId是 RequestedPoliciesForUserBean 類的主鍵。三個模型類如下所示,帶有 getter 和 setter(為了更好的可讀性,不顯示 getter 和 setter)
@Table(name="users")
public class UserBean {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "native")
@GenericGenerator(name = "native",
strategy = "com.example.policymanagementsystem.idgenerator.UserIdGenerator",
parameters = {
@Parameter(name = UserIdGenerator.INCREMENT_PARAM, value = "50"),
@Parameter(name = UserIdGenerator.VALUE_PREFIX_PARAMETER,value="USER_"),
@Parameter(name = UserIdGenerator.NUMBER_FORMAT_PARAMETER, value ="d"),
})
@Column(name="userId")
private String userId;
@Size(min = 2 , max = 30, message = "must have atleast 2 characters and maximum 30")
@Column(name="name")
private String name;
@Column(name="age")
private String age;
@Column(name="city")
private String city;
@JsonFormat(shape = JsonFormat.Shape.STRING,pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "dd-MM-yyyy")
@Column(name="dateOfBirth")
private Date dateOfBirth;
@Size(max = 10 , message = "phone number must have 10 numbers")
@Column(name="phone")
private String phone;
@Email
@Column(name="email")
private String email;
@Pattern(regexp="^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#&()–[{}]:;',?/*~$^ =<>]).{8,60}$", message = "password must have atleast 1 digit,1 upper case & 1 lower case letter,"
"1 special character,"
"no whitespace & minimum 8 & maximum 20 characters")
@NotNull(message="password cannot be null")
@Column(name="encodedPassword")
private String password;
@OneToMany(mappedBy = "users" , cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<RequestedPoliciesForUserBean> requestedPoliciesForUserBean;
@NotNull(message = "role cannot be null")
@Column(name = "role")
@Enumerated(EnumType.STRING)
private Role role;
@Entity
@Table(name="policy")
public class PolicyBean {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "native")
@GenericGenerator(name = "native",
strategy = "com.example.policymanagementsystem.idgenerator.PolicyIdGenerator",
parameters = {
@Parameter(name = PolicyIdGenerator.INCREMENT_PARAM, value = "50"),
@Parameter(name = PolicyIdGenerator.VALUE_PREFIX_PARAMETER,value="POLICY_"),
@Parameter(name = PolicyIdGenerator.NUMBER_FORMAT_PARAMETER, value ="d"),
})
@Column(name="policyNo")
private String policyNo;
@Size(min = 2 , max = 30, message = "must have atleast 2 characters and maximum 30")
@Column(name="planName")
private String planName;
@Min(value = 1, message = "tenure cannot be zero")
@Column(name="tenure")
private String tenure;
@OneToMany(mappedBy = "policy" , cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Set<RequestedPoliciesForUserBean> requestedPoliciesForUserBean;
@Entity
@Table(name="requestedpoliciesforuser")
public class RequestedPoliciesForUserBean {
@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "native")
@GenericGenerator(name = "native",
strategy = "com.example.policymanagementsystem.idgenerator.TransactionIdGenerator",
parameters = {
@Parameter(name = UserIdGenerator.INCREMENT_PARAM, value = "50"),
@Parameter(name = UserIdGenerator.VALUE_PREFIX_PARAMETER,value="TRANS_"),
@Parameter(name = UserIdGenerator.NUMBER_FORMAT_PARAMETER, value ="d"),
})
@Column(name="transactionId")
@Id
private String transactionId;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "userId", nullable = false)
private UserBean users;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "policyNo", nullable = false)
private PolicyBean policy;
@Column(name = "planName")
private String planName;
@Column(name = "tenure")
private String tenure;
@Enumerated(EnumType.STRING)
private PolicyStatus policyStatus;
我有三個資料庫表作為用戶,策略,requestedpoliciesforusers。
userId(用戶表中的主鍵)和policyNo(策略表中的主鍵)是requestedpoliciesforusers 表的外鍵參考。一個用戶可以請求多個策略,當用戶請求策略時,資料將與 userId 和 policyNo 一起插入到請求的policiesforusers 表中。場景將如下所示。| 用戶 | 政策 | |--------|--------| | 1 | 一個 | | 1 | 乙| | 2 | 一個 | | 3 | 乙| | 1 | C | 但是休眠正在為userId和policyNo插入空值,但所有其他欄位都被正確插入。下面是相同的螢屏截圖。

我的郵遞員請求如下:
{
"userId":"USER_02902",
"policyNo":"POLICY_00001",
"planName":"Recurring Deposit Plan",
"tenure":"20"
}
請建議為什么將空值插入資料庫。一對多或多對一映射所需的任何更改。提前致謝!
RequestedPoliciesForUserController
@RestController
@RequestMapping("/user")
public class RequestedPoliciesForUserController {
@Autowired
private RequestedPoliciesForUserService requestedPoliciesForUserService;
@PutMapping(path="/policy/request",consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public PolicyResponses requestPolicy(@RequestBody RequestedPoliciesForUserBean requestedPoliciesForUser) {
PolicyResponses policyResponses = new PolicyResponses();
boolean isPolicyRequested = requestedPoliciesForUserService.requestPolicy(requestedPoliciesForUser);
if(isPolicyRequested) {
policyResponses.setStatusCode(200);
policyResponses.setMessage("request sent");
policyResponses.setDescription("Policy request sent successfully");
}
return policyResponses;
}
}
RequestedPoliciesForUserServiceImpl
@Service
public class RequestedPoliciesForUserServiceImpl implements RequestedPoliciesForUserService {
@Autowired
RequestedPoliciesForUserDAO requestedPoliciesForUserDAO;
@Override
public boolean requestPolicy(RequestedPoliciesForUserBean requestedPoliciesForUserBean) {
// TODO Auto-generated method stub
return requestedPoliciesForUserDAO.requestPolicy(requestedPoliciesForUserBean);
}
}
RequestedPoliciesForUserDAOImpl
@Repository
public class RequestedPoliciesForUserDAOImpl implements RequestedPoliciesForUserDAO {
@PersistenceUnit
private EntityManagerFactory entityManagerFactory;
@Override
public boolean requestPolicy(RequestedPoliciesForUserBean requestedPoliciesForUserBean) {
EntityManager entityManager = null;
EntityTransaction entityTransaction = null;
boolean isPolicyRequested = false;
try {
entityManager=entityManagerFactory.createEntityManager();
entityTransaction=entityManager.getTransaction();
entityTransaction.begin();
System.out.println(requestedPoliciesForUserBean);
requestedPoliciesForUserBean.setPolicyStatus(PolicyStatus.PENDING);
entityManager.persist(requestedPoliciesForUserBean);
entityTransaction.commit();
entityManager.close();
isPolicyRequested =true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
} // end of requestPolicy()
}
郵遞員回應
{
"statusCode": 0,
"message": null,
"description": null,
"policyList": null
}
uj5u.com熱心網友回復:
在PolicyBean和UserBean類中創建 PK 引數建構式。此外,郵遞員中的請求與RequestedPoliciesForUserBean. 你過userId,班有users,policyNo班有policy。
UserBean 建構式:
public UserBean(String userId) {
this.userId = userId;
}
PolicyBean 建構式:
public PolicyBean(String policyNo) {
this.policyNo = policyNo;
}
將您的請求 JSON 更改為:
{
"users": "USER_02902",
"policy": "POLICY_00001",
"planName": "Recurring Deposit Plan",
"tenure": "20"
}
它會將資料保存在表格的所有列中requestedpoliciesforuser。也不要直接使用物體管理器,而是使用 JPA。春季資料 JPA
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/521225.html
標籤:mysql春天弹簧靴休眠
上一篇:如何使用HibernateValidator和Quarkus回傳驗證錯誤的自定義回應
下一篇:java.lang.IllegalArgumentException:找不到標頭名稱“first_name”。可用列
