Jira自定义实体类型创建与数据模型扩展技术咨询
嘿,作为长期开发Jira插件的开发者,我可以明确告诉你:完全可以扩展Jira的数据模型,添加自定义实体并关联现有Jira对象。下面针对你的几个具体问题逐一解答:
关于自定义实体扩展的可行性
- 当然可以!Jira提供了官方机制让插件开发者添加全新的数据库实体,并且能和用户、问题、项目这些核心对象建立关联。最常用的方式是使用Atlassian的**Active Objects(AO)**框架——这是专门为Atlassian插件设计的轻量级ORM,完美适配Jira的生态。
ORM映射与数据存储
- 不需要自己处理特殊存储结构!Active Objects会自动将你定义的实体接口映射到标准SQL表,而且会兼容Jira支持的所有数据库(MySQL、PostgreSQL、SQL Server等)。
- 每个自定义实体对应一张独立的SQL表,表名可以通过
@Table注解指定;关联现有Jira对象时,AO会自动存储对应对象的ID(比如用户的key、问题的ID),并帮你处理关联查询,不需要手动写JOIN语句。
Jira SDK的支持情况
- Jira SDK完全支持这种扩展,Active Objects本身就是SDK的核心组件之一。你只需要在插件的pom.xml中引入AO的依赖,然后通过注解定义实体和关联关系即可。举个简单的示例:
import net.java.ao.Entity; import net.java.ao.ManyToOne; import net.java.ao.schema.Table; import com.atlassian.jira.user.ApplicationUser; import com.atlassian.jira.issue.Issue; // 定义自定义实体,映射到CUSTOM_ASSETS表 @Table("CUSTOM_ASSETS") public interface Asset extends Entity { // 自定义字段 String getName(); void setName(String name); // 关联Jira用户 @ManyToOne ApplicationUser getOwner(); void setOwner(ApplicationUser owner); // 关联Jira问题 @ManyToOne Issue getLinkedIssue(); void setLinkedIssue(Issue issue); }
额外注意事项
- 不能直接修改Jira的核心数据库表,所有自定义实体都必须是插件独立的表——这是Atlassian的安全规范,避免破坏Jira的核心数据。
- 操作自定义实体时要遵循Jira的权限模型,比如只有有权限查看某个问题的用户,才能查看关联的自定义实体。
- 插件升级时,如果需要修改实体结构(比如添加字段),要通过AO的迁移机制处理,避免数据丢失。
内容的提问来源于stack exchange,提问作者nightwatch
相关产品推荐
相关产品推荐

