2014-02-05 33 views
1

我想在Hibernate ORM中使用Postgresql網絡數據類型的mac地址(macaddr)。我如何將macaddr類型映射到實體類屬性?這樣做的最好方法是什麼?我從來沒有使用非標準SQL類型在Hibernate中Hibernate中的PostgreSQL網絡類型

THX

回答

1

MAC地址是一個字符串。如果它是Mac地址與其用戶之間的@OneToOne關係,那麼您不必使用簡單的字符串創建實體類,只需將其包含爲任何實體所需的字段即可,如下所示:

private String macAddress; 

如果相同的MAC地址被多個實體和要重複使用的值(規範化),那麼你會做這樣的實體:

package com.acme.model; 

import java.io.Serializable; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

@Entity 
public class MacAddress implements Serializable { 

    private static final long serialVersionUID = 1l; 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    private String value; 

    public Long getId() { 
     return id; 
    } 

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

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 
} 
+1

Mac地址不是「一個字符串」。在Postgres中,它是一個擁有自己獨特運算符的自己的數據類型。它用於在表中定義列,而不是創建實體(表) –

0

因爲MAC地址是永遠不會完全以驗證,Java中沒有Standard-Type。您可以使用

@ColumnTransformer(read="CAST(mac AS varchar)", write="CAST(? AS macaddr)") String 

,而不是讀/寫爲String。

+0

您不能將mac轉換爲varchar,因爲它們不是兼容的二進制類型。我想你首先需要創建一個函數,然後使用該函數進行強制轉換。 –