If it's the only one headline to host a datetree. You can set the DATE_TREE property in the Journal headline, and then there are placed.
But if you want to have more datetrees in the gtd.org file, you should use a file+function target.
Updated
I've been developing a solution for this problem taking in consideration multiple DATETREES for the same file and here is my function:
(defun test-capture-func ()
(org-capture-put-target-region-and-position)
(widen)
(goto-char 1)
(search-forward-regexp "^\\*+ Journal")
(let* ((lvl (org-current-level))
(org-datetree-base-level (+ 1 lvl)))
(org-narrow-to-subtree)
(move-end-of-line 1)
(let* ((date (calendar-gregorian-from-absolute (org-today)))
(year (nth 2 date))
(month (car date))
(day (nth 1 date)))
(save-restriction
(goto-char (point-min))
(org-datetree-find-year-create year)
(org-datetree-find-month-create year month)
(org-datetree-find-day-create year month day)
(goto-char (prog1 (point) (widen)))))
(org-narrow-to-subtree)
(org-capture-put :exact-position nil)))
But it's a problem the org implementation of the function org-capture-set-target-location, needs a small modification I'm going to propose to the org developers. The problem is that when you use the function or file+function target, it set the :exact-position property to (point) in the org-capture-plist, so you can't append the template as subheading of the current position heading.
The modification is in the function or file+function target, change the line:
(org-capture-put :exact-position (point))
for:
(unless (memq :exact-position org-capture-plist)
(org-capture-put :exact-position (point)))
In this way now, you can set in your function :exact-position to nil, as I do in the function above, and then capture puts the templates inside the heading at point.
file+datetree
only takes a file path, not a parent node. So you are seeing the expected behavior.