Design is a means to an end, design patterns are standard solutions to common problems.
Design books should not be read as "always to do this", but as "this is a standard solution for this problem". If you don't have the problem, you don't need to solve it. And sometimes your particular context may permit an easier or otherwise better solution.
So let's see why Joshua Bloch recommends these items, shall we? (Sorry for the occasional inaccuracy, I'm paraphrasing from memory here)
decreasing mutability, making fields final
Immutable state is referentially transparent and therefore easier to reason about. It is also inherently thread-safe.
... but databases hold mutable data. A database application must therefore deal with mutable data, and the clearest way to express this is using mutable objects.
To help with concurrent mutation, databases shield the application from concurrent changes by means of transactions.
That is, immutable objects, and transaction scoped objects are different solutions for the problem of reasoning about concurrent mutations.
refuse default constructors
When working with objects, we generally want them to be fully initialized.
We can enforce this by writing a constructor that initializes the object.
... but state persisted in a database has already been initialized. By providing a default constructor, the framework can recreate the object while bypassing initialization.
That is, we can ensure that objects are initialized by initializing them in a constructor, or by having a framework recreate initialized objects.
(BTW, complex JPA entities often use both approaches: they have a public constructor for initializing, and a package-visible constructor for recreating)
disabling inheritance
When you are writing a library, you need to be able to change your code without breaking clients, and you may even need to prevent malicious clients from breaking your code. Inheritance can interfere with both unless carefully managed.
When you are writing an application, your code is not usually subclassed by other teams, making it easy to change sub classes when changing the super class.
That is, you can prevent super class changes from breaking sub classes by preventing subclassing, by restricting yourself to superclass changes that can not break subclasses, or by changing subclasses when they break.
How should I deal with it? Is the book useless in practice?
By considering these standard solutions to common problems, when you encounter these problems.