gpt4 book ai didi

java - 仅更新更改的实体字段并检查 EJB 中其他用户的更改

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:02 25 4
gpt4 key购买 nike

在 EJB 类中,我有两个带有远程接口(interface)的方法:

Class MyBean {
public CustomerEntity getCustomer(String id) {......}
public void updateCustomer(CustomerEntity newValues, CustomerEntity oldValues) {......}
}

客户实体由一些带有 getter 和 setter 的字段组成。

@Entity 
public class Customer {
@ID private String id;
@Column private String name;
@Column private String phone;
// Getters and setters
.
.
}

客户端应用程序执行以下操作:

Customer customer myBeanRemoteInterface.getCustomer("some id");
Customer oldCustomer = customer; //Save original customer data
displayCustomerFormAndAcceptChanges(customer);
myBeanRemoteInterface.updateCustomer(customer, oldCustomer);

EJB updateCustomer 现在应该更新服务器上的客户。为了避免覆盖其他用户对其他字段所做的任何更改,只应提交该用户已更改的字段。就像下面这样:

public void updateCustomer(CustomerEntity newValues, CustomerEntity oldValues) {
Customer customer = entityManager.find(Customer.class, oldValues.getId());
if (!newValues.getName().equals(oldValues.getName()) { // Value updated
// If the value fetched by entityManager.find is different from what was originally fetched that indicates that the value has been updated by another user.
if (!customer.getName().equals(oldValues.getName()) throw new CustomerUpdatedByOtherUserException();
else customer.setName(newValues.getName());
}
// repeat the code block for every field in Customer class
entityManager.flush();
}

现在的问题是 updateCustomer 中的代码块需要为 Customer 类中的每个字段重复一次。如果将新字段插入到 Customer 类中,则 EJB 也需要更新。

如果向 Customer 类添加更多字段,我需要一个无需更新 EJB 即可工作的解决方案。

有什么建议吗?

最佳答案

使用 Java 反射:

     Method[] methods = Customer.class.getDeclaredMethods();
Class<?>[] methodParams = null;
Object[] paramValue = new Object[1];

for (Method method : methods) {

if(method.getName().contains("set")) //This is for set methods.
{
methodParams = method.getParameterTypes();
if(methodParams[0].equals(String.class))
{
paramValue[0] = "some string"; // Assigning some value to method parameter
}

method.invoke(customer, paramValues); // customer is your object you are executing your methods on.
}
}

关于java - 仅更新更改的实体字段并检查 EJB 中其他用户的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16699304/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com