Как использовать для конвертации в sping jpa - PullRequest
0 голосов
/ 28 марта 2020

Для запуска приложения я использую пакет Tomcat 8.5.50 на войне. я использую версию весны 5.2. В моем коде я хочу использовать LocalDataTime, как это:

@Entity
@Table(name="meals")
public class Meal {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Integer id;

    @Column(name = "date_time")
    @Convert(converter = MealConverter.class)
    private LocalDateTime datetime;

    @Column(name = "description")
    private String description;

    @Column(name = "calories")
    private int calories;

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

    public int getId() {
        return id;
    }

    public LocalDateTime getDatetime() {
        return datetime;
    }

    public void setDatetime(LocalDateTime datetime) {
        this.datetime = datetime;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public int getCalories() {
        return calories;
    }

    public void setCalories(int calories) {
        this.calories = calories;
    }
}

мой конвертер:

@Converter(autoApply = true)
public class MealConverter implements AttributeConverter<Meal, String> {

    private static final String SEPARATOR = ", ";

    @Override
    public String convertToDatabaseColumn(Meal meal) {
        StringBuilder sb = new StringBuilder();
        sb.append(meal.getCalories()).append(SEPARATOR)
                .append(meal.getDatetime())
                .append(SEPARATOR)
                .append(meal.getDescription());
        return sb.toString();
    }

    @Override
    public Meal convertToEntityAttribute(String dbData) {
        String[] rgb = dbData.split(SEPARATOR);
        Meal meal = new Meal(Integer.valueOf(rgb[0]),
                LocalDateTime(valueOf(rgb[1]),
                rgb[2],
                rgb[3]);
        return meal;
    }
}

Я пытаюсь использовать конвертер в методе convertToEntityAttribute, но компилятор не позволяет мне сделать это. Что нужно исправить в моем конвертере?

enter image description here

1 Ответ

0 голосов
/ 29 марта 2020
    Meal meal = new Meal(Integer.valueOf(rgb[0]),
            LocalDateTime(valueOf(rgb[1]),
            rgb[2],
            rgb[3]);
  1. Ваш класс Meal не имеет явного конструктора, поэтому вы не можете передавать аргументы new Meal(). Вы, кажется, пытаетесь передать два аргумента. Возможно, вы захотите создать подходящий конструктор или можете передать эти два значения в Meal с помощью установщиков после создания объекта.
  2. LocalDateTime - это класс, но вы, кажется, пытаетесь называть это как метод с тремя аргументами. Если это java.time.LocalDateTime, вы, вероятно, намеревались LocalDateTime.of(someArguemts), но в этом классе нет метода с тремя аргументами of. Если вы лучше объясните, какой результат вы ожидаете, мы можем лучше вам помочь.
  3. В качестве первого аргумента для LocalDateTime у вас есть вызов метода valueOf, который, кажется, не объявлен в вашем классе. , Возможно, вы предполагали Integer.valueOf, как в предыдущей строке.
  4. Если вы пытаетесь использовать значения RGB для инициализации даты (не знаю, какой это может иметь смысл), имейте в виду, что если ваш RGB значения go до 255, это, скорее всего, не сработает, за исключением того, что номера только месяца go до 12 и дня месяца до 31.

Я не уверен, что следующее является правильным или делает то, что вы хотите, чтобы он делал, но это предположение о том, что вы можете после.

@Override
public Meal convertToEntityAttribute(String dbData) {
    String[] fields = dbData.split(SEPARATOR);
    Meal meal = new Meal();
    meal.setCalories(Integer.parseInt(fields[0]));
    meal.setDateTime(LocalDateTime.parse(fields[1]));
    meal.setDescription(fields[2]);
    return meal;
}

Я пытаюсь сделать противоположный ваш convertToDatabaseColumn метод. Я отбросил имя переменной rgb, потому что я не видел, как она не может ввести в заблуждение здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...