In this case, create a property Booleaninstead Boolean, then the initial value will be null, and not by default - false. This will also help verify, as you can make sure that the selection falsewas intentional, and not just the default.
In general, you can use a method isAttached()(or a property style variant attached), for example
def product = Product.get(5) ?: new Product()
product.isDiscounted = product.attached ? product.isDiscounted ? true
:
def product = Product.get(5) ?: new Product(discounted: true)