Is it possible to use build in function in Active Objects?

Irina Svirkina September 16, 2022

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);
}

 

2 answers

0 votes
Irina Svirkina September 19, 2022

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[]{});
}
}
Irina Svirkina December 29, 2022

Finally it didn't work for postgreSQL.

0 votes
Martin Bayer _MoroSystems_ s_r_o__
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
September 16, 2022

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/

Irina Svirkina September 19, 2022

@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.

Suggest an answer

Log in or Sign up to answer