1.ManyToOne功能增强

1.ManyToOne不需要填写依赖和允许跨App安装

  1. 如果是模型的ManyToOne依赖,app.json不需要填写应用依赖
  2. 如果2个APP不存在继承扩展,只存在调用关系或者模型的many2one引用,可以不安装在一起
  3. 注意:如果模型之前存在继承扩展关系,必须安装在一起

1.@ManyToOne 指定targetModel的格式为 appName.modelName

@Model
public class TestLog extends BaseModel {
   
    @ManyToOne(targetModel = "newSdkApp.TestOrg")// Many2one跨app安装,格式为:其他app的名字.模型名
    @JoinColumn(name = "org_code")
    private Map<String, Object> testOrg;

}

2.如果需要再ManyToOne方添加tab页显示另外一个app的数据,需要再tabs的body里面指定 "app": "newSdkAppOthers"

"tabs": [
	{
		"body": {
			"columns": [
				{
					"label": "备注",
					"name": "remark"
				},
				{
					"label": "创建时间",
					"name": "createDate"
				}
			],
			"app": "newSdkAppOthers",
			"field": "testLogs",
			"type": "grid"
		},
		"header": "日志列表",
		"tbar": []
	}
]

2.ManyToOne指定任意的显示字段

之前的ManyToOne默认只能是 displayForModel字段,现在已经修改成支持任意字段的显示

通过注解displayFormat指定任意显示的字段(指定的字段必须是存在数据库中的,不能是related字段):

指定任意字段:

@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="orgCode")
@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="${orgCode}")

指定多个字段格式化输出:

@ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL},displayFormat ="${name}-${orgCode}")

3.ManyToOne关联非ID字段,比如关联code字段

之前的ManyToOne默认只能是关联ID字段,现在可以关联code等非ID字段 示例

通过注解referencedProperty指定任意字段:

 @ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL})
  @JoinColumn(name = "org_id", referencedProperty = "orgCode")
  private TestOrg org;
  
  //引擎内置的base app的模型可以不指定app
  @ManyToOne(displayName = "组织", targetModel = "rbac_organization") 
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> organization;
  
  //如果明确知道是跨app安装,需要指定app.modelname,
  @ManyToOne(displayName = "组织", targetModel = "mbm-main.res_enterprise")
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> enterprise;
  

3.ManyToOne关联非ID字段,比如关联code字段

之前的ManyToOne默认只能是关联ID字段,现在可以关联code等非ID字段 示例

通过注解referencedProperty指定任意字段:

 @ManyToOne(displayName = "2单选异步获取Many2one", cascade = {CascadeType.DEL_SET_NULL})
  @JoinColumn(name = "org_id", referencedProperty = "orgCode")
  private TestOrg org;
  
  //引擎内置的base app的模型可以不指定app
  @ManyToOne(displayName = "组织", targetModel = "rbac_organization") 
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> organization;
  
  //如果明确知道是跨app安装,需要指定app.modelname,
  @ManyToOne(displayName = "组织", targetModel = "mbm-main.res_enterprise")
  @JoinColumn(name = "org_code", referencedProperty = "code")
  private Map<String, Object> enterprise;
  

4.ManyToOne和ManyToMany支持related属性显示

  1.Many2one的用法 ,不需要使用select属性


@@Model(name = "TestUser", description = "用户")
public class TestUser extends BaseModel<TestUser> {
    @ManyToOne(displayName = "组织")
    @JoinColumn(name = "org_id", referencedProperty = "id")
    private TestOrg org;
    
}



@Model(name = "TestOrg", description = "组织")
public class TestOrg extends BaseModel<TestOrg> {

    @Property(displayName = "名称")
    private String name;

    @ManyToOne
    @JoinColumn(name = "parent_id")
    private TestOrg parent;
    
   
    @Property(displayName = "父组织",related = "parent.name",displayForModel = true)
    private String parentName;
}






2.ManyToMany

        @ManyToMany
        @JoinTable(name = "role_user", joinColumns = @JoinColumn(name = "user_id", nullable = false),
                        inverseJoinColumns = @JoinColumn(name = "role_id", nullable = false))
        @Selection(multiple = true,properties = "parentNmae")
        @Property(displayName = "角色")
        private List<TestRole> roleList;



@Model
public class TestRole extends BaseModel {

    @Property(columnName = "role_name", displayName = "角色名称")
    private String roleName;

  
    @ManyToOne
    @JoinColumn(name = "parent_id")
    private TestOrg parent;
    
   
    @Property(displayName = "父组织",related = "parent.name")
    private String parentNmae;
    
        }