我有一个小问题。当我运行下面的代码时,它会给我一个错误消息:
线程中的异常" main" java.lang.IllegalArgumentException:未知的实体bean类:类com.dke.ps.Items.Item,请验证此类是否已使用@Entity批注标记。 在org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:707) 在org.eclipse.persistence.internal.jpa.EntityManagerImpl.find(EntityManagerImpl.java:588) 在com.dke.ps.Server.Server.main(Server.java:121)
这是我的代码:
package com.dke.ps.Server;
import static com.dke.ps.Constants.Constants.*;
import com.dke.ps.Items.Item;
import com.dke.ps.Items.Potion;
import com.dke.ps.Items.Weapon;
import com.dke.ps.Items.Armor;
import java.util.ArrayList;
import java.sql.*;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class Server
{
public Server()
{
/*
Inicializace serveru.
- login informace pro server jsou připravené v konstantách v balíčku Constants ;)
*/
}
public boolean login(String username, String password)
{
/*
Ověření loginu.
- vrací TRUE pokud je username a password správné
- jinak vrací FALSE
*/
return true;
}
public String getSaveGame(User user)
{
String saveData = "";
/*
Stáhne ze serveru uloženou pozici.
*/
return saveData;
}
public void uploadSaveGame(String saveData)
{
/*
Nahraje na server uloženou pozici.
*/
}
public ArrayList<Weapon> getDbWeapons()
{
ArrayList<Weapon> dbWeapons = new ArrayList<>();
/*
Stáhne všechny zbraně ze serveru a vrátí je jako ArrayList.
Nezapomeň při vkládání doplnit parametr Item.type!
*/
return dbWeapons;
}
public ArrayList<Armor> getDbArmors()
{
ArrayList<Armor> dbArmors = new ArrayList<>();
/*
Stáhne všechny zbroje ze serveru a vrátí je jako ArrayList.
Nezapomeň při vkládání doplnit parametr Item.type!
*/
return dbArmors;
}
public ArrayList<Potion> getDbPotions()
{
ArrayList<Potion> dbPotions = new ArrayList<>();
/*
Stáhne všechny zbroje ze serveru a vrátí je jako ArrayList.
Nezapomeň při vkládání doplnit parametr Item.type!
*/
return dbPotions;
}
public ArrayList<Item> getDbItems()
{
ArrayList<Item> dbItems = new ArrayList<>();
/*
Volá metody:
getDbWeapons();
getDbArmors();
getDbPotions();
A jejich obsah sloučí do jednoho listu, který vrátí.
*/
return dbItems;
}
public ArrayList<Integer> getPurchasedItems(User user)
{
ArrayList<Integer> listOfPurchasedItems = new ArrayList<>();
/*
Vrátí seznam předmětů zakoupených uživatelem User (je-li přihlášení validní)
viz getter user.isLoginOk().
*/
return listOfPurchasedItems;
}
public boolean purchaseItem(User user, int itemId)
{
/*
Zapíše nákup předmětu do databáze.
- vrací TRUE byl-li zápis úspěšný
- jinak FALSE.
*/
return true;
}
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("com.dke_project-sheogorath_jar_0.1aPU");
EntityManager em = emf.createEntityManager();
Item item = em.find(Item.class, 1);
System.out.println(" ID = " + item.getItemid());
System.out.println(" NAME = " + item.getName());
System.out.println(" Description = " + item.getDescription());
System.out.println(" getType = " + item.getType());
}
}
和班级项目:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package com.dke.ps.Items;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
/**
*
* @author vitva
*/
@Entity
@Table(name = "item")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i")
, @NamedQuery(name = "Item.findByItemid", query = "SELECT i FROM Item i WHERE i.itemid = :itemid")
, @NamedQuery(name = "Item.findByName", query = "SELECT i FROM Item i WHERE i.name = :name")
, @NamedQuery(name = "Item.findByValue", query = "SELECT i FROM Item i WHERE i.value = :value")
, @NamedQuery(name = "Item.findByDescription", query = "SELECT i FROM Item i WHERE i.description = :description")
, @NamedQuery(name = "Item.findByIcon", query = "SELECT i FROM Item i WHERE i.icon = :icon")
, @NamedQuery(name = "Item.findByType", query = "SELECT i FROM Item i WHERE i.type = :type")
, @NamedQuery(name = "Item.findByPrice", query = "SELECT i FROM Item i WHERE i.price = :price")})
public class Item implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "itemid")
public int itemid;
@Column(name = "name")
public String name;
@Column(name = "value")
public Integer value;
@Column(name = "description")
public String description;
@Column(name = "icon")
public String icon;
@Column(name = "type")
public Integer type;
@Column(name = "price")
public Integer price;
public Item() {
}
public Item(Integer itemid) {
this.itemid = itemid;
}
public Integer getItemid() {
return itemid;
}
public void setItemid(Integer itemid) {
this.itemid = itemid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
}
我不知道问题出在哪里。我只想在类的主要方法中创建,以测试我的数据库是否正常下载表。
这是我的persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="com.dke_project-sheogorath_jar_0.1aPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://slon.felk.cvut.cz:5432/db17_koresmi1"/>
<property name="javax.persistence.jdbc.user" value="db17_koresmi1"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.password" value="databaze_dbs"/>
<property name="javax.persistence.schema-generation.database.action" value="create"/>
</properties>
</persistence-unit>
</persistence>
你能帮帮我吗?
谢谢!