에 연결되지 않습니다. (대부분 persistence.xml 문제로 인해) 내 persistence.xml을 수정하도록 안내되었습니다. 그래서 그것은 두 개의 추가 특성을 포함한다;EJB 프로젝트가 더비 데이터베이스에 연결할 수 없다는 어제 문제점이있는 오른쪽 Derby 데이터베이스/테이블
<property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" />
는 우선에 .. 나는 그런 모든 것이 지금 잘 될 것입니다하지만, 내가 그 경우가 실현 갖는 SCHEMA "xx" doesn't exist
또는 Unknown entity bean class: class model.Userbay, please verify that this class has been marked with the @Entity annotation.
같은 오류의 무리에 직면되지 않습니다를 추가 한 데 Entity Manager의 .find() 메소드를 통해 데이터베이스에서 행 중 하나를 가져 오려고 시도했습니다. 데이터베이스에서 레코드를 검색하기 위해 테스트를 한 후에 데이터베이스에 레코드를 삽입하고 어떤 일이 발생하는지 보려고하는 것이 좋습니다. 다음 코드 행을 실행했습니다.
emgr.createNativeQuery("insert into ADRIAN.USERBAY (USER_NAME, PASSWORD, EMAIL, FIRST_NAME, LAST_NAME) values('testts123s', '1', '1', '1', '1')").executeUpdate();
나는 그것이 데이터에 있지만 (기록을 발견했다() 난 그냥 (testts123s)를 삽입 기본 키를 찾을 수 아무것도 그러나 .find을 실행하려고 가지고 ... 데이터베이스에 삽입되지 않은 것으로 나타났습니다 소스 탐색기에서 데이터베이스의 테이블에이 레코드가 채워지지 않았습니다. 그러므로 내 질문은 내가 빈 테이블에 연결되었다는 것입니다.
다음은 코드입니다.
의 persistence.xml
<?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">
<!-- <jta-data-source>JDBC/MyDB</jta-data-source> -->
<class>model.Userbay</class>
<class>model.Item</class>
<class>model.Category</class>
<properties>
<property name="javax.persistence.jdbc.password" value="123" />
<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" />
<!-- <property name="eclipselink.ddl-generation" value="create-tables" />
<property name="eclipselink.ddl-generation.output-mode" value="database" /> -->
</properties>
</persistence-unit>
</persistence>
UserRegistration 세션빈
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.management.Query;
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(name = "EJBAuctionv2") private EntityManager emgr;
/**
* Default constructor.
*/
public userRegistrationSB() {}
@Override
public boolean registerUser(String username, String password, String email,
String firstname, String lastname) {
boolean registered = false;
//emgr.createNativeQuery("insert into ADRIAN.USERBAY (USER_NAME, PASSWORD, EMAIL, FIRST_NAME, LAST_NAME) values('testts123s', '1', '1', '1', '1')").executeUpdate();
System.out.println("Registering an user with username: " + username);
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) {
return false;
}
@Override
public boolean userMatchesPassword(String username, String password) {
return false;
}
}
Userbay 엔티티 빈
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 @GeneratedValue (strategy = GenerationType.TABLE)
@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;
}
}
이 삽입 후 예외가 있나요 -
은 여기에서, ClientDriver를 선택하는이 시간 나는 처음부터했을 비디오입니까? JPA를 사용한다면 실제로 네이티브 쿼리를 사용하지 않으려 고 시도하십시오. –
처음 삽입 할 때 아무런 문제가 없었지만 두 번째 시도는 다음과 같은 예외가있었습니다 (따라서 지금 주석 처리 된 이유는 무엇입니까?) - org.apache.derby.client.am.SqlException :이 때문에 명령문이 중단되었습니다 고유 또는 1 차 키 제한 조건의 중복 키 값 또는 'USERBAY'에 정의 된 'SQL140225111513480'에 의해 식별 된 고유 색인. 추신 그것은 테스트 목적으로 만 사용되었고 내가 예상했던 테이블을 확실히 다루지 않는다는 것을 깨달았습니다. – Adrian
아마 id 생성이 작동하지 않을 것입니다. 이 행을 데이터베이스에서 제거하고 다시 한 번 실행하십시오. 모든 것이 정상이고 두 번째 삽입 중에 만 문제가 발생하면 ID를 생성하는 데 문제가 있음을 의미합니다. 예를 들어 generatedValue 전략을 변경하십시오. –