簡體   English   中英

EJB Project類映射內的實體Bean

[英]Entity Beans inside EJB Project class mapping

我正在使用Eclipse和Derby數據庫(帶有Embeeded驅動程序)。 作為起點,我從那里運行asadmin(從glassfish)到啟動數據庫。 eclipse中的數據庫可以被ping通,也可以連接到數據庫。 啟動了將會話bean和實體bean結合在一起的EJB項目后,我遇到了以下異常-java.lang.IllegalArgumentException:未知實體bean類:class model.Userbay,請驗證該類是否已標有@Entity批注。

在此錯誤下方,只有幾行指向該行代碼Userbay user = emgr.find(model.Userbay.class, username); 盡管我的感覺是persistence.xml可能首先導致了問題。

我非常感謝為解決這個煩人的問題提供的任何提示/幫助,我和我的朋友現在已經面對了很長時間。

以下是java / xml文件;

Persistence.xml(存儲在ejbModule / META-INF下)

<?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="EJBAuctionv2">
        <class>model.Userbay</class>
        <class>model.Item</class>
        <class>model.Category</class>
    </persistence-unit>
</persistence>

我也嘗試添加以下屬性標簽-但是,它還會引發另一個錯誤org.apache.derby.client.am.SqlException:模式'ADRIAN'不存在

<properties>
     <property name="javax.persistence.jdbc.password" value="test" />
     <property name="javax.persistence.jdbc.user" value="adrian" />
     <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeededDriver" />
     <property name="javax.persistence.jdbc.url" value="jdbc:derby:C:/Users/Adrian/MyDB;create=true" />
    </properties>

userRegistrationSB.java(會話Bean)

package auction;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Remote;
import javax.ejb.Singleton;
import javax.ejb.Stateful;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import model.Userbay;

/**
 * Session Bean implementation class userRegistrationSB
 */
@Remote @Stateless
public class userRegistrationSB implements userRegistrationSBRemote {

    //@EJB private Userbay user;
    @PersistenceContext private EntityManager emgr;
    /**
     * Default constructor. 
     */
    public userRegistrationSB() {
        // TODO Auto-generated constructor stub
        System.out.println("TEST2");
    }

    @Override
    public boolean registerUser(String username, String password, String email,
            String firstname, String lastname) {
        boolean registered = false;

        System.out.println("Registering an user");
        Userbay user = emgr.find(model.Userbay.class, username);
        if (user != null) {
            System.out.println("Username doesn't exist.");
            registered = true;
        } else {
            registered = false;
            System.out.println("Username already exists.");
        }

        return registered;
    }

    @Override
    public boolean userExists(String username) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean userMatchesPassword(String username, String password) {
        // TODO Auto-generated method stub
        return false;
    }

}

Userbay.java(實體Bean)

package model;

import java.io.Serializable;
import javax.persistence.*;
import java.util.List;




@Entity @Table (name = "Userbay")
/*@NamedQuery(name="Userbay.findAll", query="SELECT u FROM Userbay u")*/
public class Userbay implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id @Column(name="USER_NAME")
    private String userName;

    private String email;

    @Column(name="FIRST_NAME")
    private String firstName;

    @Column(name="LAST_NAME")
    private String lastName;

    @Column(name="PASSWORD")
    private String password;

    //bi-directional many-to-one association to Item
    @OneToMany(mappedBy="userbay")
    private List<Item> items;

    public Userbay() {
    }

    public String getUserName() {
        return this.userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getEmail() {
        return this.email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getPassword() {
        return this.password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Item> getItems() {
        return this.items;
    }

    public void setItems(List<Item> items) {


this.items = items;
}

public Item addItem(Item item) {
    getItems().add(item);
    item.setUserbay(this);

    return item;
}

public Item removeItem(Item item) {
    getItems().remove(item);
    item.setUserbay(null);

    return item;
}

}

我也嘗試添加以下屬性標簽-但是,它還會引發另一個錯誤org.apache.derby.client.am.SqlException:模式'ADRIAN'不存在

您是否檢查過數據庫架構是否已創建? 如果沒有,請在persistence.xml中添加以下幾行可能會有所幫助。

<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />

您可能還想手動取消部署應用程序,或者如果它是您的開發人員機器,則這是唯一部署的應用程序,只是刪除您域中應用程序目錄的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM