Hej :)
Zaczynam poznawać JPA i chciałem przetestować bibliotekę Ebean: http://www.avaje.org
Stworzyłem w projekcie persistent Unit dla postgres'a:
<?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="ebeanPU" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>t.Paczka</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/KBD"/>
<property name="javax.persistence.jdbc.password" value="postgres"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
</properties>
</persistence-unit>
</persistence>
Na podstawie tego stworzyłem przez NetBeans'a klase encji: new -> Entity class from database.
Dalej tworze obiekt w metodzie main i wypełniam go danymi i próbuję użyć metody save biblioteki Ebean.
@Entity
@Table(name = "paczka", catalog = "KBD", schema = "test")
public class Paczka implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id", nullable = false)
private Integer id;
@Basic(optional = false)
@Column(name = "nadawca", nullable = false, length = 2147483647)
private String nadawca;
@Basic(optional = false)
@Column(name = "odbiorca", nullable = false, length = 2147483647)
private String odbiorca;
...}
public static void main(String[] args) {
Paczka paczka = new Paczka();
//paczka.setId() ma isc z sekwencji postgresa
paczka.setNadawca("ja");
paczka.setOdbiorca("ty");
Ebean.save(paczka);
}
Niestety otrzymuje błąd:
Exception in thread "main" javax.persistence.PersistenceException: Error getting sequence nextval
at com.avaje.ebean.config.dbplatform.SequenceIdGenerator.getMoreIds(SequenceIdGenerator.java:213)
at com.avaje.ebean.config.dbplatform.SequenceIdGenerator.loadMoreIds(SequenceIdGenerator.java:163)
at com.avaje.ebean.config.dbplatform.SequenceIdGenerator.nextId(SequenceIdGenerator.java:118)
at com.avaje.ebeaninternal.server.deploy.BeanDescriptor.nextId(BeanDescriptor.java:1205)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.setIdGenValue(DefaultPersister.java:1138)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.insert(DefaultPersister.java:386)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveVanillaInsert(DefaultPersister.java:364)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveVanillaRecurse(DefaultPersister.java:348)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.saveRecurse(DefaultPersister.java:295)
at com.avaje.ebeaninternal.server.persist.DefaultPersister.save(DefaultPersister.java:269)
at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1537)
at com.avaje.ebeaninternal.server.core.DefaultServer.save(DefaultServer.java:1527)
at com.avaje.ebean.Ebean.save(Ebean.java:538)
at t.Main.main(Main.java:29)
Caused by: org.postgresql.util.PSQLException: ERROR: cross-database references are not implemented: "kbd.test.paczka_seq"
Pozycja: 16
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2102)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1835)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
at com.avaje.ebeaninternal.server.lib.sql.ExtendedPreparedStatement.executeQuery(ExtendedPreparedStatement.java:150)
at com.avaje.ebean.config.dbplatform.SequenceIdGenerator.getMoreIds(SequenceIdGenerator.java:194)
... 13 more
Java Result: 1
Tabele mam w schemacie "test" w bazie KBD, tak samo sekwencje.
Więc o co mu chodzi z tym dostępem do tabel w różnych schematach/bazach danych ?
Tutaj CREATE SQL tabelki
CREATE TABLE test.paczka
(
id serial NOT NULL,
nadawca character varying NOT NULL,
odbiorca character varying NOT NULL,
CONSTRAINT paczka_pkey PRIMARY KEY (id),
)
WITH (
OIDS=FALSE
);
ALTER TABLE test.paczka OWNER TO postgres;