После долгих экспериментов и разочарований я в конце концов решил, что не могу делать именно то, что хочу.
В конечном счете, я пошел дальше и дал дочернему объекту свой собственный синтетический ключ и позволил Hibernate управлять им. Это не идеально, так как ключ почти такой же большой, как и остальные данные, но он работает.
Протокол HTTP поддерживает запуск частичной загрузки со смещением, но имеет ограниченную поддержку для проверки локальной частичной версии файла, чтобы убедиться, что к концу не прикреплен мусор. (или что-то подобное). Если ваша среда позволяет это, я рекомендую rsync
с параметром --partial. Он разработан для поддержки такого рода функций из командной строки.
Если вы не можете использовать rsync, вы можете попробовать работать с Commons-HTTPClient и использовать HTTP-заголовок Range для загрузки блоков управляемого размера.
Если вы знаете, как создавать сокеты и потоки в java, это не так уж и сложно.
Сначала создайте запрос и прочтите заголовки, чтобы получить заголовок Content-length
. Затем разработайте стратегию разделения вашего запроса на куски, например, по 500 КБ каждый запрос. Затем запустите, скажем, 10 запросов, используя поток для каждого запроса. В каждом запросе вы должны определить заголовок Range
.
Я предлагаю вам прочитать RFC HTTP / 1.1 Header Fields здесь , если вы действительно хотите получить хорошее представление об используемом протоколе.
Однако, если вы ищете простой выход, rsync или scp должны достаточно.