# Oracle User Defined Type use in hibernate

**URL:** <https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543>\
**Category:** Hibernate ORM\
**Created:** [December 13, 2019, 2:16pm UTC](https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543 "2019-12-13T14:16:07Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bilgehanyildiz](https://avatars.discourse-cdn.com/v4/letter/b/c5a1d2/32.png) [@Bilgehanyildiz](https://discourse.hibernate.org/u/Bilgehanyildiz)\
**Post date:** [December 13, 2019, 2:16pm UTC](https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543/1 "2019-12-13T14:16:07Z")

</div>

I want to use hibernate (spring jpa) to call stored procedure.In my stored procedures there are user defined types(udt) (in or out params) In hibernate example ,I see there is refcur parametermode but I cant find something about udt parameter types in oracle.How can call storedprocedure with user defined types.Can someone share any sample.  
create or replace PROCEDURE SP\_DEMO\_SP  
(  
PId IN NUMBER,  
pmyudt OUT mytype  
)

TYPE mytype AS OBJECT  
(  
name VARCHAR2 (100),  
food\_group VARCHAR2 (100),  
);

How can I model mytype in my java codes and use it to pass parameter for stored procedure

EntityManager em=(EntityManager)applicationContext.getBean(“myEntityManager”);  
StoredProcedureQuery query=em.createStoredProcedureQuery(“SP\_DEMO\_SP”);  
query.registerStoredProcedureParameter(“pID”, Double.class, ParameterMode.IN);

```
        query.registerStoredProcedureParameter("pmyudt", mytype .class, ParameterMode.OUT);
        query.setParameter("pID", 2d);
        query.execute();
        mytype sum = (mytype ) query.getOutputParameterValue("pmyudt");
```

---

<div class="post-metadata">

**Author:** ![p3consulting](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/p3consulting/32/565_2.png) [@p3consulting](https://discourse.hibernate.org/u/p3consulting)\
**Post date:** [December 29, 2019, 7:08am UTC](https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543/2 "2019-12-29T07:08:59Z")

</div>

You can register UDT mapping to Java classes (implementing SQLData) by callling connection.getTypeMap(), adding your mapping to the returned map and eventually connection.setTypeMap().

---

<div class="post-metadata">

**Author:** ![Bilgehanyildiz](https://avatars.discourse-cdn.com/v4/letter/b/c5a1d2/32.png) [@Bilgehanyildiz](https://discourse.hibernate.org/u/Bilgehanyildiz)\
**Post date:** [December 30, 2019, 4:04am UTC](https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543/3 "2019-12-30T04:04:27Z")

</div>

If I use jdbc call you are right it work with SQLDATA,I can do like this.  
But when I try to do with hibernate I still get error  
Thanks

---

<div class="post-metadata">

**Author:** ![p3consulting](https://yyz1.discourse-cdn.com/flex035/user_avatar/discourse.hibernate.org/p3consulting/32/565_2.png) [@p3consulting](https://discourse.hibernate.org/u/p3consulting)\
**Post date:** [December 30, 2019, 5:27pm UTC](https://discourse.hibernate.org/t/oracle-user-defined-type-use-in-hibernate/3543/4 "2019-12-30T17:27:47Z")

</div>

Don’t think it’s possible in Hibernate, if you look at source code of ProcedureParameterImpl  
there is nothing to handle “special” things other than REF\_CURSOR.

```auto
@Override
public void setHibernateType(Type expectedType) {
super .setHibernateType( expectedType );
if ( mode == ParameterMode. REF_CURSOR ) {
sqlTypes = new int [] { Types. REF_CURSOR };
}
else {
if ( expectedType == null ) {
throw new IllegalArgumentException( "Type cannot be null" );
}
else {
sqlTypes = expectedType.sqlTypes( procedureCall.getSession().getFactory() );
}
}
}

```
