Можно ли сохранить 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 значительно медленнее, чем со строками.
Надеюсь это поможет