Я сталкиваюсь с проблемой при сохранении записи, когда у меня есть дополнительный столбец в таблице сопоставления в случае множества отношений.Подробности см. Ниже.
Между Пользователем и Банковскими счетами существует множество отношений.Таблица сопоставления для user_bankaccounts имеет дополнительный столбец с именем user_type, кроме первичных ключей таблицы User и BankAccount.Однако, когда я пытаюсь сохранить запись банковского счета, данные таблицы сопоставления не вставляются в таблицу user_bankaccount.Вставлена только таблица банковских счетов.Я считаю, что не должен обновлять таблицу сопоставлений самостоятельно, а hibernate автоматически обновит соответствующую таблицу сопоставлений.
@Entity
@Table(name = "Users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int userId;
@OneToMany(mappedBy = "user", fetch = FetchType.EAGER)
private Set<UserBankAccounts> userBankSet = new HashSet<UserBankAccounts>();
}
@Entity
@Table(name = "bankaccounts")
public class BankAccount implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "bank_account_id")
private int accountId;
@OneToMany(mappedBy = "bankAccounts", fetch = FetchType.EAGER)
private List<UserBankAccounts> userBankList = new ArrayList<UserBankAccounts>();
}
@Entity
@Table(name = "user_bankaccount")
@IdClass(UserBankAccountAssociationId.class)
public class UserBankAccounts {
@Id
@Column(name = "user_id", insertable = false, updatable = false)
private int userId;
@Id
@Column(name = "bank_account_id", insertable = false, updatable = false)
private int accountId;
@Column(name = "user_type")
private String userType;
@ManyToOne
@JoinColumn(name="user_id")
private User user;
@ManyToOne
@JoinColumn(name="bank_account_id")
private BankAccount bankAccounts;
}
public class UserBankAccountAssociationId implements Serializable {
private int userId;
private int accountId;
}
Метод испытания
@Test
@Loggable(value = LogLevel.DEBUG)
public void addBankAccount() {
Bank bank = bankdao.getBankByName("bank name").get(0);
User u1 = userdao.getUserByName("xxx", "yyy").get(0);
BankAccount ba = new BankAccount();
ba.setAccountType("Savings");
ba.setBank(bank);
ba.setBranch("xxx");
ba.setAccountNumber("112233445566");
ba.setOpMode("xxx");
UserBankAccounts userBankAcct = new UserBankAccounts();
userBankAcct.setUser(u1);
userBankAcct.setBankAccounts(ba);
userBankAcct.setUserId(u1.getUserId());
userBankAcct.setAccountId(ba.getAccountId());
userBankAcct.setUserType("Primary User");
u1.getUserBankSet().add(userBankAcct);
ba.getUserBankList().add(userBankAcct);
bankAccountDAO.addBankAccount(ba);
}