lanca uma IllegalArgumentException se seu parametro nao for um tipo de entidade. TransactionRequiredException e lancada se esse metodo for invocado em um contexto de persistencia com escopo de transacao. Entretanto, se o gerenciador de entidades for um contexto de persistencia estendido, e valido chamar persist() fora do escopo de uma transacao; a insercao e enfileirada ate o contexto de persistencia interagir com uma transacao.*Localizacao entidadesO gerenciador de entidades fornece dois mecanismos para localizar objetos no seu banco de dados. Uma maneira e usar os metodos simples do gerenciador de entidades que localiza uma entidade de acordo com sua chave primaria. A outra e criando e executando consultas.O EntityManager tem dois metodos diferentes que permitem localizar uma entidade de acordo com sua chave primaria.Os dois metodos aceitam a classe da entidade como um parametro e tambem como uma instancia da chave primaria da entidade. Eles usam Java generico de modo que voce nao precise aplicar nenhuma coercao. Como esses metodos diferem? O metodo find() retorna null se a entidade nao for encontrada no banco de dados. Ele tambem inicializa o estado com base nas diretivas de carregamento sob demanda (lazy-loading) de cada propriedade.Neste exemplo, estamos localizando um Address com um ID de chave primaria 2. Como isso compila se o metodo find() espera um Object com seu segundo tipo de parametro? Bom, o Java 5 tem um recurso chamando autoboxing que converte tipos primitivos diretamente em seus tipos Object. Assim, a constante 2 e convertida em uma java.lang.Integer.O getReference() difere de find() pelo fato de que, se a entidade nao for encontrada no banco de dados, esse metodo lanca uma javax.persistence.EntityNotFoundException e nao a garantia de que o estado da entidade sera inicializado.Tanto o find() como o getReference() lancam uma IllegalArgumentException se seus parametros nao forem um tipo de entidade. Eles podem ser invocados fora do escopo de uma transacao. Nesse caso, qualquer objeto retornado e desacoplado se o EntityManager for uma transacao com escopo, mas permanece gerenciado se estiver em um contexto de persistencia estendido.Objetos persistentes tambem podem ser localizados utilizando-se EJB QL. Diferentemente do EJB 2.1, nao ha metodos finder, e voce precisa criar um objeto Query chamando os metodos createQuery(), createNamedQuery() ou createNativeQuery() do EntityManager.Criar e executar uma consulta EJB QL e muito parecido com criar e executar uma PreparedStatement JDBC:Todas as instancias de objeto retornadas por find(), getResource(), ou por uma consulta, permanecerao gerenciadas enquanto o contexto de persistencia estiver ativada. Isso significa que outras chamadas para find() (ou qualquer outra) retornarao a mesma instancia do objeto de entidade.*Atualizando entidadesDepois de localizar um bean de entidade chamando find(), chamando getReference() ou criando e executando uma consulta, a instancia do bean de entidade permanece gerenciada pelo contexto de persistencia ate o contexto ser fechado. Durante esse periodo, podemos alterar o estado da instancia do bean de entidade como faria com qualquer outro objeto, e as atualizacoes serao sincronizadas automaticamente (dependendo do modo flush) ou se voce chamar o metodo flush() diretamente:*Mesclando entidadesA especificacao Java Persistence permite mesclar alteracoes de estado feitas em uma entidade desacoplada de volta para o armazenamento