No Persistence provider for EntityManager named ASN [RESOLVIDO]

16 respostas
R

Olá pessoal,

Estou aprendendo a usar o JPA hoje e não estou conseguindo fazer nada, de jeito nenhum. Eu criei minhas entidades e quando fui criar a classe de testes, deu pau!
Eu criei o persistense.xml pelo Netbeans e mesmo assim dá esse problema!

O erro:
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named ASN
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
        at NewMain.main(NewMain.java:20)

Meu código de testes:

public static void main(String[] args) {
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("ASN");
        EntityManager manager = factory.createEntityManager();
        manager.close();
    }

16 Respostas

Z

coloca seu persistence.xml aqui

D

Posta o código do seu persistence.xml.

R

<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="ASN" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/meuBanco</jta-data-source> <exclude-unlisted-classes>false</exclude-unlisted-classes> <properties> <property name="eclipselink.ddl-generation" value="create-tables"/> </properties> </persistence-unit> </persistence>

D

Vc adicionou as bibliotecas do EclipseLink do seu projeto?
Seu exemplo é uma aplicação Web ou Desktop? Se for Web vc está criando o EntityManager da maneira errado e se for Desktop seu persistence.xml é q está errado.

Z

Você colocou o persistence.xml dentro da pasta WEB-INF?

D

Desculpe zoren mas é bem claro, com esse método main q a aplicação é desktop e portanto ñ existem WEB-INF. Na verdade mesmo q existisse um WEB-INF, o persistence.xml ñ ficaria ali.

Z

Quando vc usa o JPA no desktop

vc tem q ter um pacote chamado WEB-INF e colocar ele lá dentro.

Caso você queira que ele mapeie automaticamente.

Edit:

Opa, errei o nome, é META-INF

R

Tem o eclipselink.jar e tem também o javax.persistense 2 alguma coisa .jar.

É uma aplicação WEB sim! Como fazer?

R

Troquei a versão do jar e agora está dando outro erro:

Exception in thread "main" Local Exception Stack: Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: sun.misc.Launcher$AppClassLoader@553f5d07 Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.EntityManagerSetupException Exception Description: Predeployment of PersistenceUnit [ASN] failed. Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [asnUsuarios] in entity class [class TabelasDoBanco.Usuario] has a mappedBy value of [idAsn] which does not exist in its owning entity class [class TabelasDoBanco.ASNUsuarios]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass. at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126) at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:136) at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:65) at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source) at NewMain.main(NewMain.java:20) Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.EntityManagerSetupException Exception Description: Predeployment of PersistenceUnit [ASN] failed. Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [asnUsuarios] in entity class [class TabelasDoBanco.Usuario] has a mappedBy value of [idAsn] which does not exist in its owning entity class [class TabelasDoBanco.ASNUsuarios]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass. at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1005) at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:88) at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:127) ... 4 more Caused by: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.EntityManagerSetupException Exception Description: Predeployment of PersistenceUnit [ASN] failed. Internal Exception: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [asnUsuarios] in entity class [class TabelasDoBanco.Usuario] has a mappedBy value of [idAsn] which does not exist in its owning entity class [class TabelasDoBanco.ASNUsuarios]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass. at org.eclipse.persistence.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:210) ... 7 more Caused by: Exception [EclipseLink-7154] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [asnUsuarios] in entity class [class TabelasDoBanco.Usuario] has a mappedBy value of [idAsn] which does not exist in its owning entity class [class TabelasDoBanco.ASNUsuarios]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass. at org.eclipse.persistence.exceptions.ValidationException.noMappedByAttributeFound(ValidationException.java:1344) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.RelationshipAccessor.getOwningMapping(RelationshipAccessor.java:385) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.OneToManyAccessor.processOneToManyMapping(OneToManyAccessor.java:180) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.OneToManyAccessor.process(OneToManyAccessor.java:123) at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.RelationshipAccessor.processRelationship(RelationshipAccessor.java:625) at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processRelationshipAccessors(MetadataProject.java:1273) at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage3(MetadataProject.java:1562) at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:475) at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:441) at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:959) ... 6 more Java Result: 1

D

O diretório é o META-INF em aplicações desktop. E em projetos WEB o diretório é WEB -INF/classes/META-INF.

R
Estou iniciando com JPA agora então estou meio perdido. Vou colocar as minhas entidades aqui(sem getters e setters pra ficar menor). Eu sou completamente novo(comecei hoje) com JPA. Estou dando umas estudadas mas meu chefe não para de me cobrar :(
@Table(name="ASN")
public class ASN implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @NotEmpty
    @Min(0)
    @Column(nullable=false)
    private Long asn;

    @NotNull
    @NotEmpty
    @Column(length=255, nullable=false)
    private String nomeAsn;
    
    @NotNull
    @NotEmpty
    @Column(length=255, nullable=false)
    private String cidadeAsn;

    @OneToMany(mappedBy="idUsuario")
    private List<ASNUsuarios> asnUsuarios;
public class ASNUsuarios implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @NotEmpty
    @JoinColumn(name="idAsn", referencedColumnName="id")
    @ManyToOne
    private ASN asn;

    @NotNull
    @NotEmpty
    @ManyToOne
    @JoinColumn(name="idUsuario", referencedColumnName="id")
    private Usuario idUsuario;

    @NotNull
    @NotEmpty
    @Column(nullable=false)
    private String tipoUsuario;
public class Usuario implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    @NotEmpty
    @Column(length=255, nullable=false)
    private String user;

    @NotNull
    @NotEmpty
    @Column(length=30, nullable=false)
    private String senha;

    @OneToMany(mappedBy="idAsn")
    private List<ASNUsuarios> asnUsuarios;
D

Como pode ser uma aplicação WEB com um método main? Q framework é esse q vc está utilizando?

R

Aquilo é uma classe de testes.

Agora ele diz que não consegue acessar o datasource. Até imagino porque, já que estou rodando uma classe de forma “desktop”, acho que ele não está conseguindo fazer o lookup na arvore jndi

Z

Não é isso, era pra funcionar normal se o servidor estivesse rodando

Deposi que você trocou a versão deu o erro:

The attribute [asnUsuarios] in entity class [class TabelasDoBanco.Usuario] has a mappedBy value of [idAsn] which does not exist in its owning entity class [class TabelasDoBanco.ASNUsuarios]. If the owning entity class is a @MappedSuperclass, this is invalid, and your attribute should reference the correct subclass.
Parece qeu o mapeamento está errado

Esse:

@OneToMany(mappedBy="idAsn") private List<ASNUsuarios> asnUsuarios;

Deveria apontar para idusuario, não?

edit:

Você pode mapear todos os campos no persistence.xml, o netbeans cria um datasource para colocar lá

D

vc ñ pode usar datasources quando rodando projetos a partir de aplicações desktop. P/ Desktop as configurações são um pouco diferentes.

R

Todos meus problemas foram resolvidos graças a vocês.
muito obrigado mesmo!

-> Eu realmente tinha errado o mapeamento (era idUsuario inves de idAsn)
->O que estava errado era o jar que eu estava colocando (este que causou o abrimento do tópico)

Valeu galera!

Criado 27 de outubro de 2010
Ultima resposta 27 de out. de 2010
Respostas 16
Participantes 3