我有两张桌子,分别是:
User [ UserId, FirstName, LastName, AddressId (#FK), UITransactionId ]
Address [ AddressId, city, state, UITransactionId]
UITransactionId用于捕获特定的事务更改。例如,我有一个添加页面,可以在其中填写用户的名字、姓氏和地址。如果我保存用户,下面的记录将被添加到表中。
User [ U1, Narendra, Verma , A1 , 1234 ]
Address [ A1, Pune, MH, 1234]
UITransactionId“1234”可以被视为事务id,并记录到表中,因为用户信息和地址被保存为一个事务。
现在,如果我更新用户名和地址:
User [ U1, NarendraEdit, Verma , A1 , 1255]
Address [ A1, PuneEdit, MH, 1255]
这一次“1255”Id将表示为在具有单个事务的两个表中都进行了更改。
现在,如果我更改唯一的地址并保存用户信息:
User [ U1, Narendra, Verma , A1 , 1255 ]
Address [ A1, Pune, MHEdit, 1295] //Only this table is updated
这次“1295”应该只进入地址表,因为我们没有更新用户信息,只更新了地址。
有没有任何方法可以生成特定于JPA事务的事务id,并将其设置为JPA父/子实体?
@Transactional(readOnly = false, isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED, rollbackFor = {Exception.class })
public void saveUser(UserVO userVO) {
// Setting transaction Id into User/Address Entity
// Call dao layer to save/update entity
}
有一种方法,我可以在进行交易时在服务中生成随机数,并在保存/更新特定实体时显式设置为每个实体。但这种方法需要在每个实体的每个位置设置UITransactionId。有什么合适的方法来实现这一点吗?