【发布时间】:2014-02-05 20:59:27
【问题描述】:
我想在 Hibernate ORM 中使用 Postgresql 网络数据类型的 mac 地址 (macaddr)。如何将 macaddr 类型映射到实体类属性?这样做的最佳方法是什么?我从未在 Hibernate 中使用过非标准 SQL 类型
谢谢
【问题讨论】:
标签: java hibernate postgresql
我想在 Hibernate ORM 中使用 Postgresql 网络数据类型的 mac 地址 (macaddr)。如何将 macaddr 类型映射到实体类属性?这样做的最佳方法是什么?我从未在 Hibernate 中使用过非标准 SQL 类型
谢谢
【问题讨论】:
标签: java hibernate postgresql
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;
}
}
【讨论】:
我只是解决了这样的问题,所以我成功地从 DB postgresql 9 插入和获取行。完整解释的解决方案在此链接network postgres types on hibernate
【讨论】:
因为 mac-address 永远不会被完全验证,Java 中没有 Standard-Type。你可以使用
@ColumnTransformer(read="CAST(mac AS varchar)", write="CAST(? AS macaddr)") String
而不是将其作为字符串读取/写入。
【讨论】: