Flávia, tudo bem?
A resposta para a sua pergunta vai depender de que tipo de persistência de dados você prefere/precisa utilizar...
Se você tiver a possibilidade de escolha, recomendo que use um banco de dados "NoSQL", ou seja, sem integridade referencial diretamente no banco de dados mas sim em um esquema de documentos em que o Nível de entrega do Projeto seja uma lista de objetos como parte do teu objeto Projeto.
Se houver a necessidade de manter a integridade referencial em um banco de dados como Mysql, SqlServer ou Oracle, a recomendação é que (caso você ainda não esteja fazendo assim) indexe ID do projeto + ID do nível em uma tabela itermediaria (NxN) e que adicione um campo nessa tabela de NxN indicando qual o ID/nível de maior valor... Perceba que desta forma você está desnormalizando as tabelas sem perder a integridade e transferindo o processamento pesado para a persistência ao invés de deixá-lo na busca... A partir de então, você irá sempre recalcular qual o maior nível quando estiver salvando um novo relacionamento ProjetoxNível e vai persistir esse novo Id de nível maior nas tuplas de relacionamento (NxN), a busca então passa a ser direta: "select distinct maxNivel from tabela_projeto_nivel projNiv where projNiv.id_projeto = XYZ join tabela_nivel nivel on projNiv.id_nivel = nivel.id_nivel"... Perceba que agora o acesso ao nivel será diretamente via ID, que é o melhor que você consegue de performance em um esquema de integridade referencial.