I'm developing plugin for Jira Server.
I need to run the simple query
"select ENTITY_ID, (START_TIME > 0) as STARTED from MyEntity order by STARTED".
Is it possible to do it with atlassian active objects?
@Preload
public interface MyEntity extends Entity {
String getEntityId();
void setEntityId(String entityId);
@NotNull
long getStartTime();
void setStartTime(long startTime);
}
I fixed the issue by myself. May be the solution would be helpful for somebody else.
I implemented own Query which removes "(START_TIME > 0) as STARTED" from canonical fields. It resolves the issue.
class MyQuery extends Query {
private static final long serialVersionUID = 1231231231231231231L;
public MyQuery(QueryType type, String fields) {
super(type, fields);
}
@Override
public String[] getCanonicalFields(EntityInfo<?, ?> entityInfo) {
String[] res = super.getCanonicalFields(entityInfo);
List<String> collect = Arrays.stream(res)
.filter(field -> !field.contains(">")) // this removes "(START_TIME > 0) as STARTED"
.collect(Collectors.toList());
return collect.toArray(new String[]{});
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Irina Svirkina , yes it is possible. Active Objects uses net.java.ao.Query to prepare the query which can be used to search the data you need:
https://developer.atlassian.com/server/framework/atlassian-sdk/finding-entities/
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@Martin Bayer _MoroSystems_ s_r_o__ - unfortunately it doesn't work.
Column STARTED doesn't exists in the db table.
'STARTED' is an alias. "(START_TIME > 0) as STARTED".
I need to order by the alias.
So the code silently returns nothing.
class MyEntityDao {
...
List<MyEntity> getItems() {
List<MyEntity> entities = new ArrayList<>();
try {
Query query = Query.select("select ENTITY_ID, (START_TIME > 0) as STARTED")
.order("STARTED DESC")
.limit(5);
entityManager.stream(MyEntity.class, query, entities::add);
} catch (Exception ignored) {
}
return entities;
}
}
@RunWith(ActiveObjectsJUnitRunner.class)
@Jdbc(Hsql.class)
public class MyEntityDaoTest {
@Test
public void someTest() {
// add several items to the dao.
List<MyEntity> res = dao.getItems();
assertEquals(3, res); //falls because res is empty. It doesn't fell if query = Query.select("select ENTITY_ID") above;
}
}
It doesn't fell if query = Query.select("select ENTITY_ID") above.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.