sách gpt4 ai đã đi

Đối tượng là một thể hiện tạm thời chưa được lưu - lưu thể hiện tạm thời trước khi hợp nhất

In lại 作者:太空宇宙 更新时间:2023-11-04 08:11:34 29 4
mua khóa gpt4 Nike

我有一个用于添加新公寓的表单,在该表单中我有一个下拉列表,用户可以在其中选择负责的人员。

显然,当您从下拉列表中选择并尝试保存公寓时,我的应用程序认为该人已被修改。它给了我下面的错误,指示我应该首先保存该人。但 Person 没有被修改。只有公寓才应该通过引用不同的人来保存。

对象是未保存的 transient 实例 - 在合并之前保存 transient 实例

我怎样才能让我的应用程序明白这个人本身没有被修改。只有公寓吗?

Đây là mã của tôi:

@Entity
@Table(name = "Person")
public class Person{
@Id
private Long id;
private String fullName;
....
}

@Entity
@Table(name = "Appartment")
public class Appartment{
....
@ManyToOne (fetch = FetchType.LAZY)
@JoinColumn (name = "client_contact_person_id")
private Person clientResponsiblePerson;
}

该操作将所有人员加载到责任人列表中。

和 JSP:


listKey="id" listValue="fullName" headerKey="-1"
label="%{getText('appartment.clientContact.ourContact')}" headerValue="%{getText('person.choose')}"
required="true" cssClass="select medium" />

有什么想法吗?我已经搜索和调试了几个小时,没有任何解决方案...:(

更新:Steven 建议我从 appartment.clientResponsiblePerson.id 中删除该 ID。这是一个合理的建议。我只是尝试了一下,但我的应用程序似乎不知道如何将表单提交的值映射到 Person 对象。当我设置 listKey="id" 时,提交的值是人员的 ID。

Tôi nhận được lỗi sau:字段“appartment.clientResponsiblePerson”的字段值无效。

标签“select”,字段“list”,名称“appartment.clientResponsiblePerson”:请求的列表键“responsiblePeople”无法解析为集合/数组/映射/枚举/迭代器类型。示例:人或人。{name} - [未知位置]

所以我最初的想法是也许我应该从 s:select 中删除 listKey 和 listValue。也许struts会自动检测对象的id并使用toString作为值?但我也尝试过,但没有任何运气。

另一件非常奇怪的事情是我以另一种形式做了完全相同的事情。在该表单中,我从下拉列表中选择区域。我使用 appartment.area.id 作为名称。它在那里完美地工作。奇怪..我还检查了区域 - 公寓引用未设置为自动保留或合并。

令我印象深刻的是,我想要实现的目标应该是非常直接的。我没有到达这里是什么?

1 Câu trả lời

Apparantly my application thinks that the Person is modified when you select from the dropdown and try to save the Appartment.

这正是您的代码正在做的事情。下面这行是罪魁祸首:

appartment.clientResponsiblePerson.id

这就是告诉 Struts2 框架获取您在下拉列表中选择的人员的 ID,并将其传递给 getAppartment().getClientResponsiblePerson().setId(id) 。这不会改变新的负责人,而是改变现有负责人的主键。调用 setClientResponsiblePerson(Person) 会更改此人。

尝试使用appartment.clientResponsiblePerson相反,看看它对您有何作用。

làm mới

Another really strange thing is that I do the exact same thing in another form.

我也不明白那是如何工作的。

Struts2 不知道 Person 是什么?是的,所以你有几个选择:

  1. 创建一个类型转换器来告诉 Struts2 如何从“1”(或从下拉列表中传入的任何内容)转换为 Person 的实例。
  2. Thêm vàosetPerson(Integer)您的操作上的方法将根据传入的 Integer 主键查找适当的 Person 实体,然后将您的 s:select 更新为

就我个人而言,我使用#1。

关于java - 对象是未保存的 transient 实例 - 在合并之前保存 transient 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11143491/

29 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com