gpt4 book ai didi

java - 调用 dao.findByID(id) 后实体属性没有改变

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

这里的问题是为什么在调用实体的某些 setter 后没有保存实体属性。通常,当更改托管实体的属性时,它应该传播到数据库。

看一下这个例子:

@Service
public class SystemServiceImpl implements SystemService {

@Autowired
private SystemDao systemDao;


@Override
@Transactional
public System replace(Long systemID) {

// External system to replace
System system = systemDao.findByID(systemID);
if (null != system) {
system.setName("Test"); // Calling findByID again shows that this call did not have any effect.
}
return system;
}

}

-

@Entity
@Table(name = "db.system")
public class System {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long systemID;

private String name;

@OneToMany(mappedBy = "system", fetch = FetchType.LAZY)
@JsonIgnore
private List<Customer> customers = new ArrayList<Customer>();

public Long getSystemID() {
return systemID;
}

public void setSystemID(Long systemID) {
this.systemID = systemID;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public List<Customer> getCustomers() {
return customers;
}

public void setCustomers(List<Customer> customers) {
this.customers = customers;
}
}

如果我在 system.setName("Test") 之后调用 systemDao.merge ,那么它将保存到数据库中。我觉得我不必调用合并,因为这应该是一个托管实体。

我尝试使用带有 @Transactional 和不带 @Transactional 的替换方法,并且两者都产生相同的结果。

有什么想法吗?

谢谢

最佳答案

如果 SystemDao.findByID() 返回一个分离的对象,则可以解释该行为。确保 SystemDao 不使用 RequiresNew-Transaction 或在加载对象后显式分离该对象。如果您发布 SystemDao 的代码和任何相关的配置条目(Spring、实体管理器配置等),这将非常有帮助。

关于java - 调用 dao.findByID(id) 后实体属性没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46453248/

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