2017-02-04 87 views
2
public List getAllEmployees() 
{ 
    return sessionFactory.openSession().createSQLQuery("select * from employee order by eid").list(); 
} 

員工表讓春季實體類INET有一欄ipadres,類型是在PostgreSQL中inet如何使用Hibernate

@Entity 
@Table(name="employee") 
public class Employee { 
    @Id 
    @Column(name="eid") 
    private int eid; 
    private int dept_id; 
    private String name; 
    private String address; 
    private String project; 
    private String password; 
    @Column(name="ipadres") 
    private String ipadres; 
    private double salary; 
    private Date Doj; 

這是我的POJO類。我以ipadres作爲字符串,但它給了我以下例外。

org.hibernate.MappingException:沒有爲JDBC類型映射方言:1111

回答

0

我面臨着類似的問題,當我不得不創建一個自定義的錢類型。

解決方案是創建自己的類,實現UserType接口。

下面是關於這件事有很大的文章:example

在nuthshell你有興趣在實現以下mehods:

import org.hibernate.usertype.UserType; 

public InetType impelements UserType{ 

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

public int[] sqlTypes() { 
    return new int[] { Types.OTHER }; // as the db type is inet and not directly transmutable to hibernate type. 
} 

public Object nullSafeGet(ResultSet resultSet, String[] names, Object owner) 
     throws HibernateException, SQLException { 
    String value = (String) Hibernate.STRING.nullSafeGet(resultSet, names[0]); 
    return value;   
} 

public void nullSafeSet(PreparedStatement preparedStatement, Object value, int index) 
     throws HibernateException, SQLException { 
    Hibernate.STRING.nullSafeSet(preparedStatement, 
      (value != null) ? value.toString() : null, index); 
} 
} 

然後在你的員工的實體,您需要添加類型定義的註釋:

@Entity 
@Table(name="employee") 
@TypeDefs(value={@TypeDef(name="inetType",typeClass=InetType.class)}) 
public class Employee { 

    @Column(name="ipadres") 
    @Type(type="inetType") 
    private String ipadres; 
+0

謝謝兄弟!我見過類似的解決方案,正在尋找一個簡單的.. ..恩謝謝噸@Maciej Kowalski – TheDragonWarrior

+0

很高興我可以幫助 –