Задать строковое поле для объекта, используя логическое значение?

Следующее является Entity названное лицо:

@Entity
@Table(
    name = "PERSON"
)
public class Person {

    //other fields etc

    @Column(
        name = "PAID_IN_FULL",
        nullable = false
    )
    private String paidInFull;

   public void setPaidInFull(boolean paidInFull) {
        this.paidInFull = paidInFull?"Y":"N";
    }

}

Используя сеттер выше, если бы я сделал следующее:

person.setPaidInFull(true);

Какое строковое значение будет установлено, будет ли оно "Y" или же "N"?

2 ответа

Решение
paidInFull?"Y":"N";

Есть другой способ, если сказать:

if (paidInFull)
    return "Y";
else
    return "N";

Так что, если вы должны были сделать

person.setPaidInFull(true);

this.paidInFull будет "Y".

Вот полный пример:

package nl.testing.startingpoint;

public class Main {
    private static String paidInFull;

    public static void main(String args[])
    {
        setPaidInFull(true);
        System.out.println(paidInFull);
    }

    public static void setPaidInFull(boolean paidInFull) {
        Main.paidInFull = (paidInFull) ? "Y" : "N";
    }
}

Вы также можете попробовать спящий тип "yes_no".

import org.hibernate.annotations.Type;

@Entity
@Table(name = "PERSON")
public class Person {

     //other fields etc

     @Column(name = "PAID_IN_FULL", nullable = false)
     @Type(type = "yes_no")
     private Boolean paidInFull;

     public void setPaidInFull(boolean paidInFull) {
          this.paidInFull = paidInFull
     }

}

Пожалуйста, обратитесь к https://dzone.com/articles/mapping-boolean-y-or-n-using.

Другие вопросы по тегам