Я занимаюсь практическим проектом с Spring MVC и Hibernate.Зная, что Hibernate может использовать аннотацию для сопоставления строки БД с объектом, я пытаюсь использовать Query, чтобы получить все объекты Account
из БД в список, в то время как при их вставке они имеют некоторый дублированный идентификатор.
Код для получения учетных записей
@Override
public List<Account> getAccounts() {
List<Account> list = new ArrayList<>();
try {
Session session = sessionFactory.getCurrentSession();
Query<AccountEntity> query = session.createQuery("From AccountEntity", AccountEntity.class);
List<AccountEntity> accounts = query.getResultList();
for (int i = 0; i < accounts.size(); i++) {
AccountEntity accountEntity = (AccountEntity) accounts.get(i);
Account account = new Account();
account.setAccountNo(accountEntity.getAccNo());
account.setAccountHolderName(accountEntity.getAccHolderName());
account.setBalance(accountEntity.getBalance());
account.setAccountType(accountEntity.getAccountType());
account.setPsCode(accountEntity.getPsCode());
account.setDateOfBirth(accountEntity.getDateOfBirth());
System.out.println("#: " + account.getAccountNo() + ", name: " + account.getAccountHolderName());
list.add(account);
}
} catch (Exception ex) {
ex.printStackTrace();
}
return list;
}
Теперь, когда я использую их в представлениях, дублированные идентификаторы создают строки с одинаковыми идентификатором, именем и балансом (имена не совпадают в БД). строки становятся одинаковыми
Это потому, что отображение в Hibernate просто основывается на идентификаторе, если идентификатор тот же, он создает тот же объект.
AccountEntity classс аннотациями:
@ Entity @Table (name = "account") открытый класс AccountEntity {
@Id
@Column(name="accountNo")
private int accNo;
@Column(name="accountHolderName")
private String accHolderName;
@Column(name="balance")
private int balance;
@Column(name="accountType")
private String accountType;
@Column(name="dateOfBirth")
private Date dateOfBirth;
@Column(name="psCode")
private String psCode;
public AccountEntity() {
}
public int getAccNo() {
return accNo;
}
public void setAccNo(int accNo) {
this.accNo = accNo;
}
public String getAccHolderName() {
return accHolderName;
}
public void setAccHolderName(String accHolderName) {
this.accHolderName = accHolderName;
}
public int getBalance() {
return balance;
}
public void setBalance(int balance) {
this.balance = balance;
}
public String getAccountType() {
return accountType;
}
public void setAccountType(String accountType) {
this.accountType = accountType;
}
public Date getDateOfBirth() {
return dateOfBirth;
}
public void setDateOfBirth(Date dateOfBirth) {
this.dateOfBirth = dateOfBirth;
}
public String getPsCode() {
return psCode;
}
public void setPsCode(String psCode) {
this.psCode = psCode;
}
} Что если я удалю @Id здесь?