Nuñito Calzada
Nuñito Calzada

Reputation: 2056

org.hibernate.MappingException:Could not determine type for

I have the typical app. Spring 4 MVC+Hibernate 4+MySQL+Maven integration using annotations, integrating Spring with Hibernate using annotation based configuration

I have this MySQL table:

CREATE TABLE `t_device_event` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `device_event_lat` float(10,6) DEFAULT NULL,
  `device_event_lng` float(10,6) unsigned NOT NULL
) 

and this class:

@Entity
@Table(name="t_device_event")
public class DeviceEvent {

        public class Coordinates {

            @Column(name = "device_event_lat")
            private Float lat;

            @Column(name = "device_event_lng")
            private Float lng;

            public Float getLat() {
                return lat;
            }

            public void setLat(Float lat) {
                this.lat = lat;
            }

            public Float getLng() {
                return lng;
            }

            public void setLng(Float lng) {
                this.lng = lng;
            }

            public Coordinates(Float lat, Float lng) {
                super();
                this.lat = lat;
                this.lng = lng;
            }   
        }

        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private int id;

        private Coordinates coordinates;

        public Coordinates getCoordinates() {
            return coordinates;
        }



       public void setCoordinates(Coordinates coordinates) {
            this.coordinates = coordinates;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }
        ..
        }

But I have this error when init the application:

Caused by: org.hibernate.MappingException: Could not determine type for: fr.telecom.model.DeviceEvent$Coordinates, at table: t_device_event, for columns: [org.hibernate.mapping.Column(coordinates)]
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:336)
    at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:310)
    at org.hibernate.mapping.Property.isValid(Property.java:241)
    at org.hibernate.mapping.PersistentClass.validate(PersistentClass.java:496)
    at org.hibernate.mapping.RootClass.validate(RootClass.java:270)
    at org.hibernate.cfg.Configuration.validate(Configuration.java:1358)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1849)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 70 more

Upvotes: 0

Views: 716

Answers (1)

Rafik BELDI
Rafik BELDI

Reputation: 4158

Annotating your class with @Entity means that every attribute on that class must have its mapping on the db unless its annotated with @Transient.

There is no column for coordinates that's why you are getting the exception , a solution would be

@Transient
private Coordinates coordinates;

Upvotes: 2

Related Questions