Checking for existence of object by id, name, display name, or web id
To me such a method

public final boolean doesExistById(Long id) {
    return dataAccessObject.findById(id) != null;
}


is already a code smell. What do you expect it to be used for. Something like

if (doesExistById(id)) {
    return getById(id);
} else {
    return new Something(id);
}


which means you're doing the lookup twice in the first branch. This is not too bad as there's caching somewhere, but it's strange. So I'd prefer to have no such method.



The other thing is that all it does id delegating to the dataAccessObject. Can't you use it directly. It looks like instead of calling

 dataAccessObject.findById(id)


you call

 somethingContainingTheDataAccessObject.findById(id)


Does it make sense? It might, but without more code we can't tell.



It looks like a typical XY problem. You're asking how to improve X (the repetitive doesExist* while having a problem Y (kept secret).

So all we can do is to tell you what not to do.



public final boolean doesExist(Long id, String name, String displayName, String webId) {..}


This could be a good idea if you needed a combined search often. But you're speaking about many methods and converting them into one method with many arguments is a step obviously in the wrong direction. It's much longer on the call site, much more error-prone and slightly less efficient. No gain.



public final Optional&lt;MyObj&gt; byId(Long id) {
    return Optional.ofNullable(dataAccessObject.findById(id));
}


My favorite rant says it all, though in this case it mightn't be that bad. You could use something like

public final Something getOrCreateById(Long id, Function&lt;Long, Something&gt; creator) {
    Something result = dataAccessObject.findById(id);
    return result != null ? result : creator.apply(id);
}


It wouldn't reduce the number of needed methods, but it could make them exactly what you need (remember, Y is kept secret).

With Java 8, it could get pretty compact.