03 September 2009

Building a naive Interactome Database with Hibernate.

This is my notebook for building a naive database of protein-protein interactions with Hibernate (a java object/relational persistence and query service).

Files and Directories


./project
./project/lib
./project/src
./project/src/hibernate.cfg.xml
./project/src/org
./project/src/org/lindenb
./project/src/org/lindenb/hbn01
./project/src/org/lindenb/hbn01/Journal.java
./project/src/org/lindenb/hbn01/mapping.hbm.xml
./project/src/org/lindenb/hbn01/Article.java
./project/src/org/lindenb/hbn01/Main.java
./project/src/org/lindenb/hbn01/PMID.java
./project/src/org/lindenb/hbn01/Interactor.java
./project/src/org/lindenb/hbn01/Complex.java
./project/src/org/lindenb/hbn01/Protein.java
./project/src/org/lindenb/hbn01/PMIDType.java
./project/src/log4j.properties
./project/build
./project/bin
./derby.log
./build
./build/db
./Makefile

The components / Java Classes


Interactor


An abstract class defining a protein or a complex: Just a name and an ID.
package org.lindenb.hbn01;

public class Interactor
implements java.io.Serializable
{
private Long id;
private String name;
protected Interactor()
{
}

protected Interactor(String name)
{
setName(name);
}

private void setId(Long id)
{
this.id=id;
}

public Long getId()
{
return this.id;
}
public String getName()
{
return this.name;
}
public void setName(String name)
{
this.name=name;
}

@Override
public boolean equals(Object o)
{
if(o==this) return true;
if(o==null || o.getClass()!=getClass()) return false;
return getId().equals(Interactor.class.cast(o).getId());
}

@Override
public String toString()
{
return getClass().getName()+":"+getName()+"("+getId()+")";
}
}

Protein

Protein is a concrete subclass of Interactor. This could be an Unigene entry.
package org.lindenb.hbn01;

public class Protein
extends Interactor
{
public Protein()
{
}

public Protein(String name)
{
super(name);
}

@Override
public String toString()
{
return "Protein:"+getName();
}
}

Complex

Complex is a concrete subclass of Interactor. It is a Set of Interactors. It also contains a Set of Articles holding the references for those interactions.
package org.lindenb.hbn01;
import java.util.*;

public class Complex
extends Interactor
{
private Set<Interactor> partners= new HashSet<Interactor>();
private Set<Article> articles= new HashSet<Article>();
public Complex()
{
}

public Complex(String name)
{
super(name);
}

public Set<Interactor> getPartners()
{
return this.partners;
}
public void setPartners(Set<Interactor> partners)
{
this.partners = partners;
}
public Set<Article> getArticles()
{
return this.articles;
}

public void setArticles(Set<Article> articles)
{
this.articles = articles;
}
@Override
public String toString()
{
String s="Complex:"+getName()+". ID:"+getId()+" interacts with";
for(Interactor i: getPartners())
{
s+=" "+i.getName();
}
return s;
}
}

Article

an Article is a reference to a paper in Pubmed. I wanted to use the custom dataType in hibernate, so I used the class PMID rather than an Integer. Each Article is linked to a Journal.
package org.lindenb.hbn01;

public class Article
implements java.io.Serializable
{
private PMID pmid;
private String title;
private Integer year;
private String doi;
private Journal journal;

public Article()
{
}

public Article(PMID pmid,Journal journal,Integer year,String title)
{
setPmid(pmid);
setJournal(journal);
setYear(year);
setTitle(title);
}

public Journal getJournal()
{
return journal;
}

public String getDoi()
{
return this.doi;
}

public void setDoi(String doi)
{
this.doi=doi;
}

public void setJournal(Journal journal)
{
this.journal=journal;
}

private void setPmid(PMID pmid)
{
this.pmid=pmid;
}
public PMID getPmid()
{
return this.pmid;
}
public void setTitle(String title)
{
this.title=title;
}
public String getTitle()
{
return this.title;
}
public void setYear(Integer year)
{
this.year=year;
}
public Integer getYear()
{
return this.year;
}

public String toString()
{
return "("+getYear()+")\""+getTitle()+"\"."+getJournal().getTitle();
}
}

PMID

A custom type holding a Pubmed identifier
package org.lindenb.hbn01;
import org.hibernate.*;
import java.io.Serializable;

public class PMID
implements java.io.Serializable
{
private long pmid;

public PMID(String pmid)
{
this(new Long(pmid));
}

public PMID(long pmid)
{
this.pmid=pmid;
}

public long value()
{
return this.pmid;
}

public int hashCode()
{
return 31+(int)this.pmid;
}

public boolean equals(Object o)
{
if(o==this) return true;
if(o==null || !(o instanceof PMID)) return false;
return PMID.class.cast(o).pmid==this.pmid;
}

public String toString()
{
return String.valueOf(this.pmid);
}
}

Journal

A Journal is a NLM-Id and a title
package org.lindenb.hbn01;

public class Journal
implements java.io.Serializable
{
private long nlmId;
private String title;


public Journal()
{
}

public Journal(long nlmId,String title)
{
setNlmId(nlmId);
setTitle(title);
}

private void setNlmId(long nlmId)
{
this.nlmId=nlmId;
}
public Long getNlmId()
{
return this.nlmId;
}
public void setTitle(String title)
{
this.title=title;
}
public String getTitle()
{
return this.title;
}

public String toString()
{
return getTitle()+"["+getNlmId()+"]";
}
}

Using a Custom Type

PMIDType implements EnhancedUserType. Hibernate will use this class to manage the class PMID (how to read/write it from/to the database).
package org.lindenb.hbn01;
import org.hibernate.*;
import org.hibernate.usertype.EnhancedUserType;
import java.sql.*;
import java.io.Serializable;

public class PMIDType
implements EnhancedUserType
{


public int[] sqlTypes() {
return new int[]{Types.INTEGER};
}


public Object assemble(Serializable cached,
Object owner)
throws HibernateException
{
return cached;
}

public Serializable disassemble(Object value)
throws HibernateException
{
return Serializable.class.cast(value);
}

public boolean isMutable() { return false;}
public Object deepCopy(Object value)
{
return value;
}
public boolean equals(Object a, Object b)
{
return a==null?b==null:a.equals(b);
}

public int hashCode(Object x) throws HibernateException
{
return x==null?0:x.hashCode();
}

public Object nullSafeGet(ResultSet rs,
String[] names,
Object owner)
throws HibernateException,
SQLException
{
Object o = rs.getObject( names[0] );
if(rs.wasNull()) return null;
if(o instanceof Number)
{
return new PMID(Number.class.cast(o).longValue());
}
else if(o instanceof String)
{
return new PMID(String.class.cast(o));
}
throw new IllegalArgumentException("Bad class "+o.getClass());
}

public void nullSafeSet(PreparedStatement st,
Object value,
int index)
throws HibernateException, SQLException
{
if(value==null)
{
st.setNull( index, Types.INTEGER );
}
else
{
st.setLong(index,PMID.class.cast(value).value());
}
}


public Object replace(Object original,
Object target,
Object owner)
throws HibernateException
{
return original;
}

public Class<?> returnedClass()
{
return PMID.class;
}


public Object fromXMLString(String xmlValue)
{
return xmlValue==null? null: new PMID(new Long(xmlValue));
}
public String objectToSQLString(Object value)
{
return value==null? null: String.valueOf(PMID.class.cast(value).
value());
}
public String toXMLString(Object value)
{
return value==null? null: String.valueOf(PMID.class.cast(value).
value());
}
}

The mapping file

The file mapping.hbm.xml tells hibernate how the classes are linked to each others.
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.lindenb.hbn01" default-cascade="none" default-access="property" default-lazy="true" auto-import="true">

<class name="org.lindenb.hbn01.Article" table="Article" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<meta attribute="class-description" inherit="true">A pubmed Article</meta>
<id name="pmid" column="pmid" type="org.lindenb.hbn01.PMIDType">
<meta attribute="field-description" inherit="true">Pubmed Identifier</meta>
<generator class="assigned"/>
</id>
<property name="title" not-null="true" unique="false" optimistic-lock="true" lazy="false" generated="never"/>
<property name="doi" unique="true" type="string" optimistic-lock="true" lazy="false" generated="never"/>
<property name="year" column="yearDate" type="integer" not-null="true" unique="false" optimistic-lock="true" lazy="false" generated="never"/>
<many-to-one name="journal" column="nlmId" not-null="true" unique="false" update="true" insert="true" optimistic-lock="true" not-found="exception" embed-xml="true"/>
</class>

<class name="Journal" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<id name="nlmId" column="nlmId" type="long">
<generator class="assigned"/>
</id>
<property name="title" not-null="true" unique="false" optimistic-lock="true" lazy="false" generated="never"/>
</class>

<class name="Interactor" mutable="true" polymorphism="implicit" dynamic-update="false" dynamic-insert="false" select-before-update="false" optimistic-lock="version">
<id name="id" type="long">
<generator class="native"/>
</id>
<property name="name" not-null="true" unique="false" optimistic-lock="true" lazy="false" generated="never"/>

<joined-subclass name="Protein" dynamic-update="false" dynamic-insert="false" select-before-update="false">
<key column="interactorId" on-delete="noaction"/>
</joined-subclass>

<joined-subclass name="Complex" dynamic-update="false" dynamic-insert="false" select-before-update="false">
<key column="interactorId" on-delete="noaction"/>

<set name="partners" table="interactions" sort="unsorted" inverse="false" mutable="true" optimistic-lock="true" embed-xml="true">
<key column="complex_id" on-delete="noaction"/>
<many-to-many column="interactor_id" class="Interactor" embed-xml="true" not-found="exception" unique="false"/>
</set>

</joined-subclass>
</class>

</hibernate-mapping>

Configuring Hibernate


The file hibernate.cfg.xml describes the database we are using for persisting all the entities (driver, uri, login, password...). Here I've used JavaDB/Derby (Note: the 'unique' directive was ignored by Derby (?) ).
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>

<session-factory>

<!-- Database connection settings -->
<property name="connection.driver_class">org.apache.derby.jdbc.EmbeddedDriver</property>
<property name="connection.url">jdbc:derby:build/db/derby/hibernate;create=true</property>
<property name="connection.username">sa</property>
<property name="connection.password"/>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>

<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.DerbyDialect</property>

<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>

<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>

<mapping resource="org/lindenb/hbn01/mapping.hbm.xml"/>

</session-factory>

</hibernate-configuration>

Running


Building a Session factory

sessionFactory = new Configuration().configure().buildSessionFactory();

Creating an Interacome

Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
Journal journal = new Journal(1L,"PNAS");
session.save(journal);
Article article= new Article(new PMID(12234),journal,1988,"Article title 1");
article.setDoi("1");
session.save(article);
article= new Article(new PMID(456789),journal,1989,"Article title 2");
article.setDoi("2");
session.save(article);


Protein prot1= new Protein("prot1");
session.save(prot1);
Protein prot2= new Protein("prot2");
session.save(prot2);
Protein prot3= new Protein("prot3");
session.save(prot3);
Complex c1= new Complex("cplx1");
c1.getPartners().add(prot1);
c1.getPartners().add(prot2);
session.save(c1);
Complex c2= new Complex("cplx2");
c2.getPartners().add(prot1);
c2.getPartners().add(c1);
c2.getArticles().add(article);
session.save(c2);

session.getTransaction().commit();

Querying

Listing the Journals
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Journal").list();

for(Object o:list)
{
System.out.println(o);
}
session.getTransaction().commit();

Listing the Articles
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Article").list();

for(Object o:list)
{
System.out.println(o);
}
session.getTransaction().commit();
Listing the Interactors
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Interactor").list();

for(Object o:list)
{
System.out.println("\n\n###\t"+o+"\n\n");
}
session.getTransaction().commit();

Full code

package org.lindenb.hbn01;

import org.hibernate.*;
import org.hibernate.cfg.*;
import java.util.*;

public class Main
{
private static final SessionFactory sessionFactory;

static
{
try
{
sessionFactory = new Configuration().configure().buildSessionFactory();
}
catch(Throwable err)
{
err.printStackTrace();
throw new ExceptionInInitializerError(err);
}
}

public static SessionFactory getSessionFactory()
{
return Main.sessionFactory;
}

private void listJournals()
{
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Journal").list();

for(Object o:list)
{
System.out.println(o);
}
session.getTransaction().commit();
}

private void listArticles()
{
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Article").list();

for(Object o:list)
{
System.out.println(o);
}
session.getTransaction().commit();
}

private void listInteractors()
{
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
List list = session.createQuery("from Interactor").list();

for(Object o:list)
{
System.out.println("\n\n###\t"+o+"\n\n");
}
session.getTransaction().commit();
}

public void run()
{
Session session= getSessionFactory().getCurrentSession();
session.beginTransaction();
Journal journal = new Journal(1L,"PNAS");
session.save(journal);
Article article= new Article(new PMID(12234),journal,1988,"Article title 1");
article.setDoi("1");
session.save(article);
article= new Article(new PMID(456789),journal,1989,"Article title 2");
article.setDoi("2");
session.save(article);


Protein prot1= new Protein("prot1");
session.save(prot1);
Protein prot2= new Protein("prot2");
session.save(prot2);
Protein prot3= new Protein("prot3");
session.save(prot3);
Complex c1= new Complex("cplx1");
c1.getPartners().add(prot1);
c1.getPartners().add(prot2);
session.save(c1);
Complex c2= new Complex("cplx2");
c2.getPartners().add(prot1);
c2.getPartners().add(c1);
c2.getArticles().add(article);
session.save(c2);

session.getTransaction().commit();

listJournals();
listArticles();
listInteractors();
}

public static void main(String args[])
{
try
{
Main app= new Main();
app.run();
}
catch(Throwable err)
{
err.printStackTrace();
}
finally
{
if(Main.sessionFactory!=null) Main.sessionFactory.close();
}
System.out.println("Done.");
}
}

Compiling

LIB=${HIBERNATE_HOME}/lib
LIBS=${LIB}/antlr-2.7.6.jar:${LIB}/cglib-2.1.3.jar:${LIB}/asm.jar:${LIB}/asm-attrs.jar:${LIB}/commons-collections-2.1.1.jar:${LIB}/commons-logging-1.0.4.jar:${HIBERNATE_HOME}/hibernate3.jar:${LIB}/jta.jar:${LIB}/dom4j-1.6.1.jar:${LIB}/log4j-1.2.11.jar:${DERBY_HOME}/derby.jar
test:
cp -r project/src/* project/build
javac -cp ${LIBS} -d project/build -sourcepath project/build project/build/org/lindenb/hbn01/*.java
jar cvf project/bin/project.jar -C project/build .
java -cp ${LIBS}:project/bin/project.jar org.lindenb.hbn01.Main

Output

21:49:15,396 INFO Environment:514 - Hibernate 3.2.6
21:49:15,402 INFO Environment:547 - hibernate.properties not found
21:49:15,405 INFO Environment:681 - Bytecode provider name : cglib
21:49:15,409 INFO Environment:598 - using JDK 1.4 java.sql.Timestamp handling
21:49:15,457 INFO Configuration:1432 - configuring from resource: /hibernate.cfg.xml
21:49:15,458 INFO Configuration:1409 - Configuration resource: /hibernate.cfg.xml
21:49:15,546 INFO Configuration:559 - Reading mappings from resource : org/lindenb/hbn01/mapping.hbm.xml
21:49:15,682 INFO HbmBinder:300 - Mapping class: org.lindenb.hbn01.Article -> Article
21:49:15,751 INFO HbmBinder:300 - Mapping class: org.lindenb.hbn01.Journal -> Journal
21:49:15,752 INFO HbmBinder:300 - Mapping class: org.lindenb.hbn01.Interactor -> Interactor
21:49:15,778 INFO HbmBinder:873 - Mapping joined-subclass: org.lindenb.hbn01.Protein -> Protein
21:49:15,780 INFO HbmBinder:873 - Mapping joined-subclass: org.lindenb.hbn01.Complex -> Complex
21:49:15,781 INFO HbmBinder:1419 - Mapping collection: org.lindenb.hbn01.Complex.partners -> interactions
21:49:15,783 INFO Configuration:1547 - Configured SessionFactory: null
21:49:15,802 INFO DriverManagerConnectionProvider:41 - Using Hibernate built-in connection pool (not for production use!)
21:49:15,803 INFO DriverManagerConnectionProvider:42 - Hibernate connection pool size: 1
21:49:15,803 INFO DriverManagerConnectionProvider:45 - autocommit mode: false
21:49:16,036 INFO DriverManagerConnectionProvider:80 - using driver: org.apache.derby.jdbc.EmbeddedDriver at URL: jdbc:derby:build/db/derby/hibernate;create=true
21:49:16,036 INFO DriverManagerConnectionProvider:86 - connection properties: {user=sa, password=****}
21:49:18,144 INFO SettingsFactory:89 - RDBMS: Apache Derby, version: 10.2.2.1 - (538595)
21:49:18,145 INFO SettingsFactory:90 - JDBC driver: Apache Derby Embedded JDBC Driver, version: 10.2.2.1 - (538595)
21:49:18,158 INFO Dialect:152 - Using dialect: org.hibernate.dialect.DerbyDialect
21:49:18,165 INFO TransactionFactoryFactory:31 - Using default transaction strategy (direct JDBC transactions)
21:49:18,167 INFO TransactionManagerLookupFactory:33 - No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
21:49:18,167 INFO SettingsFactory:143 - Automatic flush during beforeCompletion(): disabled
21:49:18,167 INFO SettingsFactory:147 - Automatic session close at end of transaction: disabled
21:49:18,168 INFO SettingsFactory:162 - Scrollable result sets: enabled
21:49:18,168 INFO SettingsFactory:170 - JDBC3 getGeneratedKeys(): disabled
21:49:18,169 INFO SettingsFactory:178 - Connection release mode: auto
21:49:18,169 INFO SettingsFactory:205 - Default batch fetch size: 1
21:49:18,170 INFO SettingsFactory:209 - Generate SQL with comments: disabled
21:49:18,170 INFO SettingsFactory:213 - Order SQL updates by primary key: disabled
21:49:18,170 INFO SettingsFactory:217 - Order SQL inserts for batching: disabled
21:49:18,170 INFO SettingsFactory:386 - Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
21:49:18,172 INFO ASTQueryTranslatorFactory:24 - Using ASTQueryTranslatorFactory
21:49:18,173 INFO SettingsFactory:225 - Query language substitutions: {}
21:49:18,173 INFO SettingsFactory:230 - JPA-QL strict compliance: disabled
21:49:18,173 INFO SettingsFactory:235 - Second-level cache: enabled
21:49:18,173 INFO SettingsFactory:239 - Query cache: disabled
21:49:18,174 INFO SettingsFactory:373 - Cache provider: org.hibernate.cache.NoCacheProvider
21:49:18,174 INFO SettingsFactory:254 - Optimize cache for minimal puts: disabled
21:49:18,174 INFO SettingsFactory:263 - Structured second-level cache entries: disabled
21:49:18,178 INFO SettingsFactory:283 - Echoing all SQL to stdout
21:49:18,178 INFO SettingsFactory:290 - Statistics: disabled
21:49:18,178 INFO SettingsFactory:294 - Deleted entity synthetic identifier rollback: disabled
21:49:18,178 INFO SettingsFactory:309 - Default entity-mode: pojo
21:49:18,179 INFO SettingsFactory:313 - Named query checking : enabled
21:49:18,206 INFO SessionFactoryImpl:161 - building session factory
21:49:18,472 INFO SessionFactoryObjectFactory:82 - Not binding factory to JNDI, no JNDI name configured
21:49:18,477 INFO SchemaExport:154 - Running hbm2ddl schema export
21:49:18,477 DEBUG SchemaExport:170 - import file not found: /import.sql
21:49:18,478 INFO SchemaExport:179 - exporting generated schema to database
21:49:18,482 DEBUG SchemaExport:303 - alter table Article drop constraint FK379164D684F84236
21:49:18,754 DEBUG SchemaExport:303 - alter table Complex drop constraint FK9BDFFC90D86C24B8
21:49:18,798 DEBUG SchemaExport:303 - alter table Protein drop constraint FK50CD6F63D86C24B8
21:49:18,834 DEBUG SchemaExport:303 - alter table interactions drop constraint FK4F6EF4A127BFBBC5
21:49:18,903 DEBUG SchemaExport:303 - alter table interactions drop constraint FK4F6EF4A1EBB9AEEF
21:49:19,029 DEBUG SchemaExport:303 - drop table Article
21:49:19,173 DEBUG SchemaExport:303 - drop table Complex
21:49:19,276 DEBUG SchemaExport:303 - drop table Interactor
21:49:19,410 DEBUG SchemaExport:303 - drop table Journal
21:49:19,537 DEBUG SchemaExport:303 - drop table Protein
21:49:19,654 DEBUG SchemaExport:303 - drop table interactions
21:49:19,814 DEBUG SchemaExport:303 - drop table hibernate_unique_key
21:49:19,896 DEBUG SchemaExport:303 - create table Article (pmid integer not null, title varchar(255) not null, doi varchar(255), yearDate integer not null, nlmId bigint not null, primary key (pmid))
21:49:20,063 DEBUG SchemaExport:303 - create table Complex (interactorId bigint not null, primary key (interactorId))
21:49:20,224 DEBUG SchemaExport:303 - create table Interactor (id bigint not null, name varchar(255) not null, primary key (id))
21:49:20,359 DEBUG SchemaExport:303 - create table Journal (nlmId bigint not null, title varchar(255) not null, primary key (nlmId))
21:49:20,580 DEBUG SchemaExport:303 - create table Protein (interactorId bigint not null, primary key (interactorId))
21:49:20,725 DEBUG SchemaExport:303 - create table interactions (complex_id bigint not null, interactor_id bigint not null, primary key (complex_id, interactor_id))
21:49:20,858 DEBUG SchemaExport:303 - alter table Article add constraint FK379164D684F84236 foreign key (nlmId) references Journal
21:49:20,997 DEBUG SchemaExport:303 - alter table Complex add constraint FK9BDFFC90D86C24B8 foreign key (interactorId) references Interactor
21:49:21,055 DEBUG SchemaExport:303 - alter table Protein add constraint FK50CD6F63D86C24B8 foreign key (interactorId) references Interactor
21:49:21,086 DEBUG SchemaExport:303 - alter table interactions add constraint FK4F6EF4A127BFBBC5 foreign key (interactor_id) references Interactor
21:49:21,202 DEBUG SchemaExport:303 - alter table interactions add constraint FK4F6EF4A1EBB9AEEF foreign key (complex_id) references Complex
21:49:21,331 DEBUG SchemaExport:303 - create table hibernate_unique_key ( next_hi integer )
21:49:21,376 DEBUG SchemaExport:303 - insert into hibernate_unique_key values ( 0 )
21:49:21,500 INFO SchemaExport:196 - schema export complete
21:49:21,501 WARN JDBCExceptionReporter:54 - SQL Warning: 10000, SQLState: 01J01
21:49:21,501 WARN JDBCExceptionReporter:55 - Database 'build/db/derby/hibernate' not created, connection made to existing database instead.
21:49:21,724 WARN JDBCExceptionReporter:54 - SQL Warning: 10000, SQLState: 01J01
21:49:21,724 WARN JDBCExceptionReporter:55 - Database 'build/db/derby/hibernate' not created, connection made to existing database instead.
Hibernate: insert into Journal (title, nlmId) values (?, ?)
Hibernate: insert into Article (title, doi, yearDate, nlmId, pmid) values (?, ?, ?, ?, ?)
Hibernate: insert into Article (title, doi, yearDate, nlmId, pmid) values (?, ?, ?, ?, ?)
Hibernate: insert into Interactor (name, id) values (?, ?)
Hibernate: insert into Protein (interactorId) values (?)
Hibernate: insert into Interactor (name, id) values (?, ?)
Hibernate: insert into Protein (interactorId) values (?)
Hibernate: insert into Interactor (name, id) values (?, ?)
Hibernate: insert into Protein (interactorId) values (?)
Hibernate: insert into Interactor (name, id) values (?, ?)
Hibernate: insert into Complex (interactorId) values (?)
Hibernate: insert into Interactor (name, id) values (?, ?)
Hibernate: insert into Complex (interactorId) values (?)
Hibernate: insert into interactions (complex_id, interactor_id) values (?, ?)
Hibernate: insert into interactions (complex_id, interactor_id) values (?, ?)
Hibernate: insert into interactions (complex_id, interactor_id) values (?, ?)
Hibernate: insert into interactions (complex_id, interactor_id) values (?, ?)
Hibernate: select journal0_.nlmId as nlmId1_, journal0_.title as title1_ from Journal journal0_
PNAS[1]
Hibernate: select article0_.pmid as pmid0_, article0_.title as title0_, article0_.doi as doi0_, article0_.yearDate as yearDate0_, article0_.nlmId as nlmId0_ from Article article0_
Hibernate: select journal0_.nlmId as nlmId1_0_, journal0_.title as title1_0_ from Journal journal0_ where journal0_.nlmId=?
(1988)"Article title 1".PNAS
(1989)"Article title 2".PNAS

Hibernate: select interactor0_.id as id2_, interactor0_.name as name2_, case when interactor0_1_.interactorId is not null then 1 when interactor0_2_.interactorId is not null then 2 when interactor0_.id is not null then 0 else -1 end as clazz_ from Interactor interactor0_ left outer join Protein interactor0_1_ on interactor0_.id=interactor0_1_.interactorId left outer join Complex interactor0_2_ on interactor0_.id=interactor0_2_.interactorId


### Protein:prot1




### Protein:prot2




### Protein:prot3


Hibernate: select partners0_.complex_id as complex1_1_, partners0_.interactor_id as interactor2_1_, interactor1_.id as id2_0_, interactor1_.name as name2_0_, case when interactor1_1_.interactorId is not null then 1 when interactor1_2_.interactorId is not null then 2 when interactor1_.id is not null then 0 else -1 end as clazz_0_ from interactions partners0_ left outer join Interactor interactor1_ on partners0_.interactor_id=interactor1_.id left outer join Protein interactor1_1_ on interactor1_.id=interactor1_1_.interactorId left outer join Complex interactor1_2_ on interactor1_.id=interactor1_2_.interactorId where partners0_.complex_id=?


### Complex:cplx1. ID:4 interacts with prot2 prot1


Hibernate: select partners0_.complex_id as complex1_1_, partners0_.interactor_id as interactor2_1_, interactor1_.id as id2_0_, interactor1_.name as name2_0_, case when interactor1_1_.interactorId is not null then 1 when interactor1_2_.interactorId is not null then 2 when interactor1_.id is not null then 0 else -1 end as clazz_0_ from interactions partners0_ left outer join Interactor interactor1_ on partners0_.interactor_id=interactor1_.id left outer join Protein interactor1_1_ on interactor1_.id=interactor1_1_.interactorId left outer join Complex interactor1_2_ on interactor1_.id=interactor1_2_.interactorId where partners0_.complex_id=?


### Complex:cplx2. ID:5 interacts with cplx1 prot1


21:49:22,076 INFO SessionFactoryImpl:769 - closing
21:49:22,076 INFO DriverManagerConnectionProvider:147 - cleaning up connection pool: jdbc:derby:build/db/derby/hibernate;create=true
Done


That's it!
Pierre

No comments: