Java 绑定Vaadin中的外键(EclipseLink)
我用的是Vaadin和EclipseLink。共有两个表格,一个是邮件,第二个是客户。客户的PK是客户id,邮件的PK是邮件id。 表Mail将Customer_id作为外键。我该怎么装订呢? 我试过: 然后我检查了邮件实体类,发现Java 绑定Vaadin中的外键(EclipseLink),java,jpa,eclipselink,vaadin,Java,Jpa,Eclipselink,Vaadin,我用的是Vaadin和EclipseLink。共有两个表格,一个是邮件,第二个是客户。客户的PK是客户id,邮件的PK是邮件id。 表Mail将Customer_id作为外键。我该怎么装订呢? 我试过: 然后我检查了邮件实体类,发现 @JoinColumn(name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID") @ManyToOne private Customer customerId; 我查看了这一页,但是没有关于fk绑定的内
@JoinColumn(name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID")
@ManyToOne
private Customer customerId;
我查看了这一页,但是没有关于fk绑定的内容 选项1:转换客户ID 这里我假设Customer类上的ID字段被称为
ID
,它的类型是Long
。这允许您通过生成无格式字符串表示的转换器访问该ID字段。请注意,这不能很好地处理null
值
binder.forField(fkCustomerId)
.withConverter(Long::valueOf, String::valueOf)
.bind("customerId.id");
选项2:转换客户对象
本例将以Customer对象为例,并将其转换为Customer 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(), "");
}
}
最好能添加更多关于您想做什么的信息。您可能不希望允许用户直接编辑您的主键。它可能应该基于用户输入以外的内容进行设置。表Mail包含其他应用程序的客户的一些邮件设置,并包含作为外键的客户id。EclipseLink将其映射为Customer customerId,但我无法绑定Customer类的对象,我需要将其转换为其他对象吗?您希望如何处理Customer对象?是否要在标签中显示customer_id值,显示下拉列表以创建新连接或其他内容?哦,是的,我想在标签中显示该值。我想它会像:binder.forField(fkCustomerId).bind(Mail::getCustomerId,Mail::setCustomerId)一样简单;但是不,它不是那样工作的
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 fkCustomerId = new TextField();
fkCustomerId.addStyleName(ValoTheme.TEXTFIELD_BORDERLESS);
fkCustomerId.setReadOnly(true);