Лучший тип для IP-адреса в Hibernate Entity? - PullRequest
4 голосов
/ 27 июля 2010

Каков наилучший тип для хранения IP-адресов в базе данных с использованием Hibernate?

Я хотя бы Byte [] или String, но есть ли лучший способ или что вы используете?

 @Column(name = "range_from",  nullable = false)
 public Byte[] getRangeFrom() {
  return rangeFrom;
 }
 public void setRangeFrom(Byte[] rangeFrom) {
  this.rangeFrom = rangeFrom;
 }

Ответы [ 2 ]

7 голосов
/ 27 июля 2010

Я храню его в длинной , очень быстро для поиска. Для преобразования вы можете использовать следующие функции.

public static string GetStandardIP(long numericIP)
{
    string w = Convert.ToString(Convert.ToInt64(numericIP / 16777216) % 256);
    string x = Convert.ToString(Convert.ToInt64(numericIP / 65536) % 256);
    string y = Convert.ToString(Convert.ToInt64(numericIP / 256) % 256);
    string z = Convert.ToString(Convert.ToInt64(numericIP) % 256);

    return w + "." + x + "." + y + "." + z;
}

А этот

public static long GetNumericIP(string standardIP)
{
    if (standardIP != null && standardIP != string.Empty)
    {
        string[] ipParts = standardIP.Split('.');
        long numericIP = 16777216 * Convert.ToInt64(ipParts[0]) + 65536 * Convert.ToInt64(ipParts[1]) + 256 * Convert.ToInt32(ipParts[2]) + Convert.ToInt32(ipParts[3]);

        return numericIP;
    }
    return 0;
}

Вы можете улучшить их, выполнив проверку параметров.

2 голосов
/ 27 июля 2010

Не имеет большого значения, используете ли вы Byte [] или String. Оба будут выполнять одну и ту же работу, это зависит только от вашего приложения и требований.

Лично я всегда сохранял их как строки.

Я не знаю, как лучше хранить их через Hibernate.

См. https://forum.hibernate.org/viewtopic.php?f=1&t=996818&start=0

редактирование: Или вы можете использовать long, как в примере с Pierre 303. В конце концов, это действительно зависит от вашего приложения и с каким типом вам легче всего иметь дело.

...