Bueno, tengo una aplicación de escritorio con JAVA y de Hibernación 4.3.1. Por ahora tengo dos entidades (Usuario y Papel).

Usuario

...

@ManyToOne(fetch = FetchType.LAZY)
@Fetch(FetchMode.JOIN)
@JoinColumn(nullable = false, name = "fk_role")
private Role fk_role;

...

Papel

...

@Column(name = "admin", nullable = false)
@Type(type = "org.hibernate.type.BooleanType")
private boolean admin = false;

...

He intentado lugar

@Type(type = "org.hibernate.type.BooleanType")

este.

@Type(type = "org.hibernate.type.NumericBooleanType")

y

@Type(type = "org.hibernate.type.YesNoType")

y

@Type(type = "org.hibernate.type.TrueFalseType")

Como se muestra aquí: http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/types.html#types-value-basic

Y nada. =/

Traté de esto también: http://alenovarini.wikidot.com/mapping-a-custom-type-in-hibernate

=(
En la base de datos, el tipo de columna admin es booleano y puedo usar Postgres 9.3.
Cuando ejecuto esto, tengo las siguientes:

org.hibernate.exception.DataException: could not execute query
at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:135)
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126)
at org.hibernate.loader.Loader.doList(Loader.java:2554)
at org.hibernate.loader.Loader.doList(Loader.java:2537)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2367)
at org.hibernate.loader.Loader.list(Loader.java:2362)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:353)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1869)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:311)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:141)
at com.print.model.schemaPublic.gateway.UserGateway.list(UserGateway.java:61)
at com.print.model.schemaPublic.UserBusiness.list(UserBusiness.java:22)
at com.print.controller.MenuController.fileNovoAction(MenuController.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.library.core.ActionListenerDelegate.actionPerformed(ActionListenerDelegate.java:48)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6516)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
at java.awt.Component.processEvent(Component.java:6281)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4872)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4698)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Causada por: org.postgresql.util.PSQLException: valor incorrecto para el tipo int: admin

2 Comentarios

  1. 11

    Por fin he encontrado el error!

    El mensaje de error que Hibernan regresaba a mí era «malo valor de tipo int: admin», pero que fue no el problema. Este mensaje estaba completamente loca en relación con el tema. El verdadero problema era que en la base de datos de mi clave principal (pk_role) es un tipo VARCHAR, pero en mi entidad me puse como un número ENTERO.

    Después de Vlad intentar ayudarme suponiendo que la versión del controlador de jdbc, puse la configuración exactamente igual a otro proyecto que tengo funcionando bastante bien y el error era el mismo, así que yo sabía que el error estaba en mi propio código, seguro.

    • Yo tenía el mismo mensaje de error que falta @Enumerated(EnumType.STRING) en enum campo
  2. 2

    Si tienen un esquema de base de datos, basta con cambiar el tipo de columna a boolean:

    ALTER TABLE role ALTER COLUMN admin TYPE boolean default false;
    ALTER TABLE role  MODIFY admin NOT NULL;

    y, a continuación, la asignación es tan simple como esto:

    @Column(name = "admin", nullable = false)
    private boolean admin = false;
    • Hey @Vlad, gracias por tu respuesta, pero mi columna en la base de datos es exactamente igual a la de ya. > administrador booleano not NULL DEFAULT false
    • Bueno, en ese caso funciona muy bien en mi actual proyecto PostgreSQL. Asegúrese de utilizar el controlador JDBC de la versión: 9.1-901-1.jdbc4 y la org.hibernate.dialect.PostgreSQLDialect dialecto.
    • Yo estaba usando la versión 9.2 de postgres, ahora que veo en el pom de archivo, pero la base de datos es de 9.3, vamos a probar a ver si funciona con la versión 9.3 en el pom…
    • Vlad, he incluido en mi pom archivo exactamente esta versión de postgresql jdbc y el error era el mismo… =/ he incluido la versión 9.3 y error demasiado

Dejar respuesta

Please enter your comment!
Please enter your name here