gpt4 book ai didi

java - 在 Vaadin 中绑定(bind)外键 (EclipseLink)

转载 作者:行者123 更新时间:2023-12-02 12:10:10 27 4
gpt4 key购买 nike

我正在使用 Vaadin 和 EclipseLink。有 2 个表,第一个是 Mail,第二个是 Customer。客户的 PK 是 customer_id,邮件的 PK 是 mail_id。表 Mail 将 Customer_id 作为外键。我该如何绑定(bind)它?我尝试过:

binder.forField(fkCustomerId)
.withConverter(new StringToBigDecimalConverter(FormMessages.NUMBERS_ONLY))
.bind(Mail::getCustomerId, Mail::setCustomerId);

然后我检查了Mail-entity类并发现

@JoinColumn(name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID")
@ManyToOne
private Customer customerId;

我检查了此页面 - https://vaadin.com/docs/v8/framework/datamodel/datamodel-forms.html但没有任何关于 fk 绑定(bind)的信息。

最佳答案

选项 1:转换客户 ID

这里我假设 Customer 类上的 ID 字段称为 id 并且它的类型为 Long。这允许您通过生成未格式化字符串表示的转换器访问该 ID 字段。请注意,这不能很好地处理 null 值。

binder.forField(fkCustomerId)
.withConverter(Long::valueOf, String::valueOf)
.bind("customerId.id");

选项 2:转换客户对象

此示例将获取客户对象并将其转换为客户 ID 字段所需的格式。这允许您处理 null 值并根据整个对象的状态进行更高级的格式化。

binder.forField(fkCustomerId)
.withConverter(new CustomerToCustomerIdConverter())
.bind(Mail::getCustomerId, Mail::setCustomerId);

您可以在转换器中省略 convertToModel 结果,因为您不应该根据用户键入的 ID 值创建客户对象。

public class CustomerToCustomerIdConverter implements Converter<String, Customer> {
@Override
public Result<Customer> convertToModel(String s, ValueContext valueContext) {
return Result.error("not supported");
}

@Override
public String convertToPresentation(Customer customer, ValueContext valueContext) {
return Objects.toString(customer.getCustomerId(), "");
}
}

文本字段样式

为了设置TextField样式,您需要将其设置为只读模式。如果您根本不想获得文本字段边框,那么您需要添加额外的样式。

TextField fkCustomerId = new TextField();
fkCustomerId.addStyleName(ValoTheme.TEXTFIELD_BORDERLESS);
fkCustomerId.setReadOnly(true);

关于java - 在 Vaadin 中绑定(bind)外键 (EclipseLink),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46604431/

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