entityComboBox 的value自定义是getInstanceName自定义,那么选中后存储的key值是否能自定义呢?(默认的是ID)
entityComboBox 选中的值不是一个实体么,怎么是instance name 呢?
下拉菜单,显示的是InstanceName
当我选中时,entity对应的字段a是个实体A,数据库对应的字段a是integer类型,存储时数据库a字段存了对应实体A的ID值。
但是我想存实体A的其他字段,该如何处理?
当数据库表B的etA字段设置为Integer类型时,加载正常
当数据库表B的eta字段设置为String类型是报错(我期望etA字段能够存entityA的code字段)
你这两个实体都是在Jmix中定义的吗?不是反向生成的吧?
反向生成的
有两种方式可以解决:
-
修改entityA的主键为 code字段。
-
接着往下看,是第二种方法,但是也需要code字段具有唯一索引(否则多对一没法找到那个唯一实体)
这个需求可以用JPA的 @JoinColumn
的 referencedColumnName
实现。比如在 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才能获取?