Reputation: 3189
I can not run my hibernate application. I'm constantly getting this error:
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/C:/Users/MAG/.m2/repository/org/slf4j/slf4j-jdk14/1.7.2/slf4j-jdk14-1.7.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/C:/Users/MAG/.m2/repository/org/slf4j/slf4j-log4j12/1.5.8/slf4j-log4j12-1.5.8.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.JDK14LoggerFactory]
2013-02-14 14:49:05 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.3.0.SP1
2013-02-14 14:49:05 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
2013-02-14 14:49:05 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : javassist
2013-02-14 14:49:05 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
2013-02-14 14:49:05 org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
2013-02-14 14:49:05 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
2013-02-14 14:49:05 org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : model/man/Man.hbm.xml
2013-02-14 14:49:06 org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: XML InputStream(25) Attribute "name" must be declared for element type "many-to-many".
2013-02-14 14:49:06 org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: XML InputStream(33) Attribute "name" must be declared for element type "many-to-many".
2013-02-14 14:49:06 org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: XML InputStream(38) The content of element type "set" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
The idea of my program is that:
Man is super class for Owner and Renter.
Owner can have many Flats but Flat can have one Owner.
Renter can have many RenterBills but RenterBill can have one Renter.
Renter can have many Flats and Flats can have many renters.
My Man.hbm.xml:
<class name="Man" table="MEN">
<id name="id" column="MAN_ID">
<generator class="native" />
</id>
<property name="pesel" column="MAN_PESEL" />
<property name="idNumber" column="MAN_ID_NUMBER" />
<property name="email" column="MAN_EMAIL" />
<property name="name" column="MAN_NAME" />
<property name="surname" column="MAN_SURNAME" />
<property name="telephoneNumber" column="MAN_TELEPHONE_NUMBER" />
<many-to-one name="address" column="ADDRESS_ID" not-null="true" />
<joined-subclass name="Owner" table="OWNERS">
<key column="MAN_ID" />
<property name="password" column="OWNER_PASSWORD" not-null="true" />
<property name="seed" column="OWNER_SEED" not-null="true" />
<set name="flats" table="OWNER_FLATS">
<key column="MAN_ID" />
<many-to-many name="flats" column="FLAT_ID" class="Flat" />
</set>
</joined-subclass>
<joined-subclass name="Renter" table="RENTERS">
<key column="MAN_ID" />
<set name="flats" table="RENTER_FLATS">
<key column="MAN_ID" />
<many-to-many name="flats" column="FLAT_ID" class="Flat" />
</set>
<set name="bills" table="RENTER_BILLS">
<key column="MAN_ID" />
<many-to-one name="bills" column="RENTER_BILL_ID" class="RenterBill" />
</set>
</joined-subclass>
</class>
Java classes: Man.java
package model.man;
import model.addresses.Address;
public abstract class Man {
private int id;
private String pesel;
private String idNumber;
private String email;
private String name;
private String surname;
private String telephoneNumber;
private Address address;
/* getters setters */
}
Owner.java
package model.man;
import java.util.Iterator;
import java.util.Set;
import model.flat.Flat;
public class Owner extends Man implements Iterable<Flat> {
private String password;
private String seed;
private Set<Flat> flats;
/* getters setters */
}
Renter.java
package model.man;
import java.util.HashSet;
import java.util.Set;
import model.bills.RenterBill;
import model.flat.Flat;
public class Renter extends Man {
private Set<Flat> flats = new HashSet<Flat>();
private Set<RenterBill> bills = new HashSet<RenterBill>();
/* getters setters */
}
Upvotes: 2
Views: 2082
Reputation: 6408
SEVERE: Error parsing XML: XML InputStream(25) Attribute "name" must be declared for element type "many-to-many".
2013-02-14 14:49:06 org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: XML InputStream(33) Attribute "name" must be declared for element type "many-to-many".
2013-02-14 14:49:06 org.hibernate.util.XMLHelper$ErrorLogger error
SEVERE: Error parsing XML: XML InputStream(38) The content of element type "set" must match "(meta*,subselect?,cache?,synchronize*,comment?,key,(element|one-to-many|many-to-many|composite-element|many-to-any),loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,filter*)".
Try removing the 'name' attribute from your many-to-many tag.
UPDATE
You have a set mapped as a many-to-one as well. This typically shows up in your Java POJO as a single instance of the referenced class. You may have meant to use a one-to-many tag there.
Upvotes: 2