Eu testei o mapeamento usando as anotações do JPA, funcionou perfeitamente tirando a obrigação da inserção de o atributo id em Aluno, porque dava problemas ao utilizar o cpf como chave primária. O problema é quando tento fazer tudo por xml, eu não consigo mapear o atributo telefones nem usando a tag "one-to-many" nem a "element-collection" já que nem são reconhecidas na IDE e lançam uma exceção quando testo o programa e ,por consequência, para fazer meus testes funcionarem eu preciso remover o atributo telefones e tudo relacionado a ele:
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd"
version="2.2">
<entity class="br.com.alura.escola.dominio.aluno.Aluno" name="Aluno">
<table name="alunos" />
<attributes>
<id name="id">
<column name="id" nullable="false" />
<generated-value strategy="IDENTITY" />
</id>
<basic name="nome">
<column name="nome" nullable="false" />
</basic>
<embedded name="cpf">
<attribute-override name="cpf">
<column name="cpf" nullable="false" />
</attribute-override>
</embedded>
<embedded name="email">
<attribute-override name="email">
<column name="email" nullable="false" />
</attribute-override>
</embedded>
<!-- Não Funciona (InvalidMappingException)
<element-collection name="telefones" target-class="br.com.alura.escola.dominio.aluno.Telefone">
<collection-table name="telefones">
<join-column name="aluno_id" nullable="false"/>
</collection-table>
<column name="telefone" nullable="false"/>
</element-collection>
-->
<!-- Não Funciona (InvalidMappingException)
<one-to-many name="telefones" fetch="LAZY">
<cascade>
<cascade-all/>
</cascade>
<join-column name="aluno_id" nullable="false"/>
</one-to-many>
-->
</attributes>
</entity>
<embeddable class="br.com.alura.escola.dominio.aluno.CPF">
<attributes>
<basic name="cpf">
<column name="cpf" nullable="false" />
</basic>
</attributes>
</embeddable>
<embeddable class="br.com.alura.escola.dominio.aluno.Email">
<attributes>
<basic name="email">
<column name="email" nullable="false" />
</basic>
</attributes>
</embeddable>
<embeddable class="br.com.alura.escola.dominio.aluno.Telefone">
<attributes>
<basic name="ddd">
<column name="ddd" nullable="false"/>
</basic>
<basic name="numero">
<column name="numero" nullable="false"/>
</basic>
</attributes>
</embeddable>
</entity-mappings>