entityComboBox key-value自定义

entityComboBox 的value自定义是getInstanceName自定义,那么选中后存储的key值是否能自定义呢?(默认的是ID)

entityComboBox 选中的值不是一个实体么,怎么是instance name 呢?

image

下拉菜单,显示的是InstanceName
当我选中时,entity对应的字段a是个实体A,数据库对应的字段a是integer类型,存储时数据库a字段存了对应实体A的ID值。
但是我想存实体A的其他字段,该如何处理?

image
image
当数据库表B的etA字段设置为Integer类型时,加载正常
当数据库表B的eta字段设置为String类型是报错(我期望etA字段能够存entityA的code字段)
image

你这两个实体都是在Jmix中定义的吗?不是反向生成的吧?

反向生成的

有两种方式可以解决:

  1. 修改entityA的主键为 code字段。

  2. 接着往下看,是第二种方法,但是也需要code字段具有唯一索引(否则多对一没法找到那个唯一实体)

这个需求可以用JPA的 @JoinColumnreferencedColumnName 实现。比如在 Order(+) -> (1)OrderType 的关系中,可以在 Order 实体中这样定义:

// 这里用referencedColumnName指定关联OrderType.code 字段。
@JoinColumn(name = "TYPE_CODE", referencedColumnName = "CODE")
@ManyToOne(fetch = FetchType.LAZY)
private OrderType type;

OrderType 定义:

@JmixEntity
@Table(name = "DEMO_ORDER_TYPE", uniqueConstraints = {
        @UniqueConstraint(name = "IDX_DEMO_ORDER_TYPE_UNQ", columnNames = {"CODE"})
})
@Entity(name = "demo_OrderType")
public class OrderType {
    @JmixGeneratedValue
    @Column(name = "ID", nullable = false)
    @Id
    private UUID id;

    @Column(name = "CODE")
    private String code;

    @InstanceName
    @Column(name = "NAME")
    private String name;
...

注意,这里一定要先给 OrderType 的CODE字段定义一个唯一约束,否则多对一的关系无法生效。

这样可以了。
我想在xml 的collection loader sql语句加入查询条件local=‘’,获取目前系统的国际化语言,是否能获取到?
还是只能后台通过jmixapp.getLocal才能获取?

这个目前只能通过java获取,再设置给loader的查询条件