What do these parameters mean at the beginning of my SQL Server query plan?
Yes, you are likely seeing implicit conversions due to the guesses SQL Server has to make. It is creating a plan that will work not just for the parameter value you're passing now, but other potential values, too. With strings it (or perhaps JDBC? not sure) chooses an arbitrary default of 4000 and Unicode. I believe there are ways in JDBC to not send Unicode (Unicode vs. non-Unicode implicit conversions are among the most tedious), but you're still going to deal with the length issue (which may or may not be an issue in your specific case; again, not sure).

To avoid the implicit conversions and guesses, and ultimately the scans and high CPU conditions, you need to make SQL Server understand the data type that is being used in the parameter through explicit / strong typing.

Here are my suggestions, in order of preference:


Switch to stored procedures.
Switch to stored procedures.
Declare your variables explicitly, e.g.:

DECLARE @p1 VARCHAR(36) = ?; UPDATE ... WHERE col = @p1;

Keep using CAST/CONVERT.