int N = transitions.length;
State[] states = new State[N];
// create nodes
for (int i = 1; i <= N; i++) {
State s = new State();
s.setName("s" + i);
em.persist(s);
states[i - 1] = s;
}
// create edges as per the transition matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (transitions[i][j] == 1) {
newTransition(states[i], states[j]);
}
}
}
em.getTransaction().commit();
em.clear();
// Select root (state 1)
Query query = em.createQuery("select s from State s where s.name=:name");
FetchPlan fetch = OpenJPAPersistence.cast(query).getFetchPlan();
fetch.setMaxFetchDepth(15);
fetch.addField(State.class, "incomingTransitions");
fetch.addField(State.class, "outgoingTransitions");
fetch.addField(Transition.class, "toState");
fetch.addField(Transition.class, "fromState");
State qs1 = (State) query.setParameter("name", "s1").getSingleResult();
em.close(); // will not load anything anymore
byte[][] actualTransitionMatrix = new byte[5][5];
fillTransitionMatrix(actualTransitionMatrix, new HashSet<State>(), qs1);