Можно ли сохранить POJO с JDBC?

Глупый вопрос: Интересно, можно ли сохранить POJO с JDBC, как это возможно с JPA?

Допустим, у меня есть класс "А", который содержит одно поле

public class A implements Serializable{

    public String someString = "asd";
}

Теперь скажем, у меня есть экземпляр A (A myA = new A();).

Мой вопрос: возможно ли сохранить "myA" с JDBC или мне нужно сохранить строку. Или когда я хочу загрузить "myA", могу ли я загрузить экземпляр "myA" или мне нужно создать "myA", загрузив строку, и создать новый экземпляр формы A с этой загруженной строкой.

3 ответа

Решение

Вы можете хранить сериализованные объекты Java в базе данных; например, используя тип Blob.

Но это, как правило, не очень хорошая идея:

  • Непрактично выполнять SQL-запрос, который проверяет состояние сериализованного объекта любым нетривиальным способом.

  • Сериализованные объекты, как правило, чувствительны к изменениям в коде объекта. Работа с этим может быть неудобной, и если вы не будете иметь с ней дело, вы можете оставить в базе данных сериализованные объекты, которые вы больше не сможете десериализовать.

Если вы хотите сохранить POJO в реляционной базе данных, вам лучше использовать объектно-реляционное отображение, такое как JPA или Hibernate.

Вам придется каким-то образом выполнять отображение (перед сохранением и при получении).

Одним из способов является создание метода, который мне нравится вызывать fillX, где вы можете выполнить сопоставление вручную (код Java) или создать какое-то соглашение, например, имя в классе со столбцом в БД.

Это хорошо сделано в Spring JDBC, например. В документации вы можете увидеть, кто что делает.

В большинстве случаев использование Object Relational Mapping, таких как JPA, было бы целесообразным, но это не всегда вариант.

В общем случае вы можете сохранить байтовый поток с помощью JDBC. В этом случае вы должны работать с BLOB (если это текстовый поток, то работать с CLOB).

Так что, если ваш класс А действительно реализует интерфейс Serializable, вы можете сериализовать его в поток байтов и сохранить.

Тем не менее, я бы все же предложил вам хранить строки вместо этого. Это связано с тем, что работа с BLOB/CLOB значительно медленнее, чем со строками.

Надеюсь это поможет

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